简单了解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;
}