随手写的。可能有错。 //冒泡排序 #include <stdio.h> int main() { int num[] = {1,4,2,6,5}; int length = sizeof(num)/sizeof(int); int i; int j; int temp; //交换的次数 int change_times=0; //外层循环一共执行 length-1次 for(i=length-1;i>0;i--) { change_times = 0; //内层循环一共执行i次 for(j=0;j<i;j++) { //num[j]大于num[j+1]则交换 if(num[j]>num[j+1]) { temp = num[j+1]; num[j+1] = num[j]; num[j] = temp; change_times++; } } //当不需要交还时,停止循环 if(change_times == 0) { break; } } for(i=0;i<length;i++) { printf("%d/n",num[i]); } system("pause"); } //选择排序 #include<stdio.h> int main() { int num[] = {5,4,3,1,2}; int length = sizeof(num)/sizeof(int); int i,j; int min_val=0,min_index=0; int temp; for(i=0;i<length;i++) { //初始化最小值 min_val = num[i]; for(j=i;j<length;j++) { //找出剩余元素最小值 if(min_val>=num[j]) { min_val = num[j]; min_index = j; } } //最小值放到剩余元素首位置 temp = num[i]; num[i] = num[min_index]; num[min_index] = temp; } for(i=0;i<length;i++) { printf("%d/n",num[i]); } system("pause"); return 0; } //插入排序 #include <stdio.h> int main() { int num[] = {3,2,1,5,4,8,9,7,11,14,12}; int length = sizeof(num)/sizeof(int); int i,j,k; for(i=1;i<length;i++) { //把第j个元素和前面j-1个元素相比较 for(j=0;j<i;j++) { //把第j个元素放到前面j-1个已经排好的元素的正确位置 if(num[j]>num[i]) { int temp = num[i]; for(k=i;k>j;k--) { num[k] = num[k-1]; } num[j]=temp; break; } } } printf("the reslut is :/n"); for(i=0;i<length;i++) { printf("%d/n",num[i]); } system("pause"); return 0; } //二分插入排序 #include <stdio.h> int main() { int num[] = {3,2,1,5,4,8,9,7,11,14,12}; int length = sizeof(num)/sizeof(int); int i,j,k; int mid; int begin,end; for(i=1;i<length;i++) { begin = 0; end = i-1; mid = i/2; while(begin <= end) { //下次搜索在左半部分,重新设定搜索区间右端点 if(num[mid] >= num[i]) { end = mid-1; } //下次搜索在右半部分,重新设定搜索区间左端点 if(num[mid] < num[i]) { begin = mid+1; } //重新设定搜索区间中点 mid = (begin+end+1)/2; } int temp = num[i]; for(j=i;j>mid;j--) { num[j] = num[j-1]; } num[mid]=temp; } printf("the reslut is :/n"); for(i=0;i<length;i++) { printf("%d/n",num[i]); } system("pause"); return 0; } //双向冒泡排序 (剃须刀排序) #include<stdio.h> int main() { int num[] = {71,62,53,44,35,26,12}; int length = sizeof(num)/sizeof(int); //记录每次扫描交换的次数 int change_times=0; int temp; int i,j,n; for(n=0;n<length;n++) { change_times = 0; //扫描每次从n开始,经过下面的从后向前扫描,会把最小值放在最前面 //扫描每次在length-n-1结束,每次扫描完最大值都会放到最后面 for(i=n;i<length-n-1;i++) { if(num[i]>num[i+1]) { temp = num[i+1]; num[i+1] = num[i]; num[i] = temp; change_times++; } } //没有可交换的元素,则排序完成 if(change_times == 0) { break; } //扫描每次从length-2-n开始,经过上面的从前向后扫描,会把最大值放在最后面 //扫描每次在n结束,每次扫描完最小值都会放到最前面 change_times = 0; for(j=length-2-n;j>n;j--) { if(num[j]<num[j-1]) { temp = num[j-1]; num[j-1] = num[j]; num[j] = temp; change_times++; } } //没有可交换的元素,则排序完成 if(change_times == 0) { break; } } printf("结果是:/n"); for(i=0;i<length;i++) { printf("%d/n",num[i]); } return 0; }