看CLRS顺便做下笔记总结一下,理清思路。(所有排序例子皆为从小到大,各位觉得哪里能更好地改进都可以指出来)
插入排序(c语言实现)
最坏情况下的运行时间是Θ(n*n),跟冒泡排序,选择排序的最坏情况下的运行时间是相同的
但是,运算的速度 插入>选择(相比冒泡交换的次数较少)>冒泡
最简单的例子啦,打牌的时候一张一张的拿到手里插入排序。
上代码
#include<stdio.h>
#include<stdlib.h>
int main(void){
int j,i,num,key;
scanf("%d",&num);
int *ptr;
ptr=(int *)malloc(num*sizeof(int));//动态内存分配
for(i=0;i<num;i++){
scanf("%d",&ptr[i]);
}
for(i=1;i<num;i++){
key=ptr[i];//你拿到的“牌”
j=i-1;//通过迭代找到合适的位置,将其他牌向前推
while(j>=0&&ptr[j]>key){
ptr[j+1]=ptr[j];
j-=1;
}
ptr[j+1]=key;//最后把牌放进去
}
for(i=0;i<num;i++){
printf("%d ",ptr[i]);
}
free(ptr);
return 0;
}
以上的方法是从迭代实现插入排序
那么我们试下递归实现插入排序
#include<stdio.h>
#include<stdlib.h>
void insert_sort(int *ptr,int num);
int main(void){
int i,num,*ptr;
scanf("%d",&num);
ptr=(int *)malloc(num*sizeof(