C语言几种排序算法
(1)选择排序算法:选择排序算法是,将第一个数和其它的数比较,将较小的数(从小到大的排列)和第一个数换位,以此类推
#include<stdio.h> int main() { int i,j; /*i用来存储数值最小的数组元素的数值,j用来存储该元素的位置*/ int a[10]; /*定义一个数组用来存储用户输入的数据*/ int iTemp; int iPos; /*通过双层循环进行选择排序,最后输出排序后的结果*/ printf("为数组元素赋值:\n"); for(i=0;i<10;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } /*从小到大排序*/ for(i=0;i<9;i++) /*设置外层为下标0-8的元素*/ { iTemp=a[i]; /*设置当前元素为最小值*/ iPos=i; /*记录元素的位置*/ for(j=i+1;j<10;j++) { if(a[j]<iTemp) /*如果当前元素比最小元素还小*/ { iTemp=a[j];/*重新设置最小值*/ iPos=j; /*记录元素位置*/ } } /*交换两个元素的位置*/ a[iPos]=a[i]; a[i]=iTemp; } /*输出数组*/ for(i=0;i<10;i++) { printf("%d\t",a[i]); if(i==4) /*如果是第五个元素*/ { printf("\n");/*输出换行*/ } } return 0; }
(2)冒泡排序算法:冒泡排序算法是指在排序时,每次比较数组中两个相邻的元素的值,将较小的数排在较大的数的前面(从小到大的排序)。
#include<stdio.h> int main() { int i,j; int a[10]; int iTemp; printf("位数组元素赋值:\n"); /*位数组元素赋值*/ for(i=0;i<10;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } /*由小到大排序*/ for(i=1;i<10;i++) { for(j=9;j>=i;j--) { if(a[j]<a[j-1]) { iTemp=a[j-1]; a[j-1]=a[j]; a[j]=iTemp; } } } for(i=0;i<10;i++) { printf("%d\t",a[i]); } return 0; }
(3)交换排序算法:交换排序算法是将每一位数与其它所有数进行比较,如果发现符合条件的数据则交换位置,具体的代码如下:
#include<stdio.h> int main() { int i,j; int iTemp; int a[10]; /*输入十个数字*/ printf("请输入10个数字:\n"); for(i=0;i<10;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } /*从小到大排序*/ for(i=0;i<9;i++) /*外层循环为0-8*/ { for(j=i+1;j<10;j++) /*内层循环为i+1-9*/ { if(a[j]<a[i]) /*如果当前值比其它值大*/ { /*交换数值*/ iTemp=a[i]; a[i]=a[j]; a[j]=iTemp; } } } /*输出数组*/ for(i=0;i<10;i++) { printf("%d\t",a[i]); } return 0; }
(4)插入排序算法:
#include<stdio.h> int mian() { int i,j; int a[10]; int iTemp; int iPos; /*输入十个数*/ printf("请输入10个数字:\n"); for(i=0;i<10;i++) { printf("a[%d]=",i); scanf("%d",&a[i]); } /*使用插入法按大小排序数组中的元素*/ for(i=0;i<10;i++) /*循环数组中的元素*/ { iTemp=a[i]; iPos=i-1; while((iPos>=0)&&(iTemp)<a[iPos] /*寻找插入值的位置*/ { a[iPos+1]=a[iPos]; iPos-; } a[iPos+1]=iTemp; } /*输出*/ }