数据结构(C语言版本)
交换
#include<stdio.h>
#include<stdlib.h>
#define swap3(x,y,t) ((t)=(x),(x)=(y),(y)=(t)) //方法4
void swap1(int x, int y) {//方法2 不成功
x = x ^ y;
y = x ^ y;
x = x ^ y;
}
void swap2(int *x, int *y) {//方法3
*x = *x ^* y;
*y = *x ^* y;
*x = *x ^* y;
}
int main() {
int a = 3, b = 4;
printf("a=%d\tb=%d\t\n", a, b);
/*
//方法1
a = a ^ b;
b = a ^ b;
a = a ^ b;
*/
//swap1(a, b);
//swap2(&a, &b);
int temp;
swap3(a, b, temp);
printf("a=%d\tb=%d\t\n", a, b);
system("pause");
return 0;
}
排序
冒泡排序
从左向右扫描数据,选择最大的数据,放在右边。
要点:比较相邻的两个数,如果左边的数大于右边的数就进行交换。
#include<stdio.h>
#include<stdlib.h>
//#define swap(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
#define swap(x,y) ((x)=(x)^(y),(y)=(x)^(y),(x)=(x)^(y)) //交换两个元素
void BubbleSort(int*a, int n/*数组长度*/) {
for (int i = 0; i < n - 1; i++) {//外循环
for (int j = 0; j < n - i - 1; j++) {//内循环
if (a[j] > a[j + 1]) {
//int temp;
//swap(a[j], a[j + 1], temp);
swap(a[j], a[j + 1]);
}
}
}
}
void print(int *a) {//打印结果
int i;
for ( i= 0; i < 10; i++)
{
if (i == 10) {
printf("%d\n", a[i]);
}
else {
printf("%d\t", a[i]);
}
}
}
int main() {
int a[10] = { 9,8,7,6,5,4,3,2,1,0 };
print(a);//交换前的元素
putchar(10);//换行
BubbleSort(a, 10);//排序
print(a);//交换后的元素
putchar(10);//换行
system("pause");
}
选择排序
从当前未排序的整数中找一个最小的整数,将它放在已排序的整数列表的最后。
要点:选择排序选最小的,往左边选。
冒泡排序与选择排序
#include<stdio.h>
#include<stdlib.h>
//#define swap(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
#define swap(x,y) ((x)=(x)^(y),(y)=(x)^(y),(x)=(x)^(y)) //交换两个元素
void SelectSort(int*a, int n) {
size_t min;
for(size_t i = 0; i < n-1; i++){
////内层循环j=i+1,外层循环控制着循环次数。即每趟中a[i]这个值就是本趟的最小值。i位置上是最小值
min= i;//每次都从已排序序列的末尾后一位开始
for (size_t j = i+1; j < n; j++){
if (a[j] < a[min]) {//寻找最小的数
min = j;//将最小数的索引保存
}
}
if (i != min) {//这个判定条件不要忘记
swap(a[i], a[min]);//交换两元素
}
#if 0
size_t temp = a[i];
a[i] = a[min];
a[min] = temp;
#endif
}
}
void print(int *a) {//打印结果
int i;
for ( i= 0; i < 10; i++)
{
if (i == 10) {
printf("%d\n", a[i]);
}
else {
printf("%d\t", a[i]);
}
}
}
int main() {
int a[10] = { 9,8,7,6,5,4,3,2,1,0 };
print(a);//交换前的元素
putchar(10);//换行
SelectSort(a, 10);//排序
print(a);//交换后的元素
putchar(10);//换行
system("pause");
}
posted on 2018-06-21 13:18 Indian_Mysore 阅读(148) 评论(0) 编辑 收藏 举报