简单了解C语言中直接插入排序与直接选择排序实现
直接插入排序
基本思路:
1.从a[0]开始,也就是从1个元素开始是有序的,a[1]~a[n-1]是无序的。
2.从a[1]开始并入前面有序的数组,直到n-1。
#include<stdio.h> #defineN5 voidinsertsort(inta[],intn); voidswap(int*x,int*y); voidinsertsort(inta[],intn){ inti,j; for(i=1;i<n;i++){ for(j=i;j>0&&a[j]<a[j-1];j--){ swap(&a[j],&a[j-1]); } } } voidswap(int*x,int*y){ inti=*x; *x=*y; *y=i; } intmain(void){ inta[N]={2,5,3,1,8}; insertsort(a,N); inti; for(i=0;i<N;i++) printf("%d",a[i]); return0; }
直接选择排序
基本思路:
1.从1开始通过对比找出最小的数的下标。然后把这个下标的值和0交换。
2.循环把值交换到123...n-1。
#include<stdio.h> #defineN5 voidselectsort(inta[],intn); voidswap(int*x,int*y); voidselectsort(inta[],intn){ inti,j; for(i=0;i<n;i++){ intmin=i; for(j=i+1;j<n;j++){ if(a[j]<a[min]){ min=j; } } swap(&a[i],&a[min]); } } voidswap(int*x,int*y){ inti=*x; *x=*y; *y=i; } intmain(void){ inta[N]={2,5,3,1,8}; selectsort(a,N); inti; for(i=0;i<N;i++) printf("%d",a[i]); return0; }