插入排序概念
插入排序是一种从序列左端开始依次对数据进行排序的算法。在排序过程中,左侧的数据陆续归位,而右侧留下的就是还未被排序的数据。插入排序的思路就是从右侧的未排序区域内取出一个数据,然后将它插入到已排序区域内合适的位置上。
思路演示
- 首先我有5 2 4 7 2 8这组数据(要升序排列)
- 首先让最左侧的5设为已排序完成的数字,而待排数字为[2,4,7,2,8],让2与5比较,若待排2小于5,则5向后移动,留出位置让2进入(像是交换两者之间的位置),现在序列为[2,5,4,7,2,8]
- 现在 以排序区的参考为5 未排数字为[4,7,2,8],让4与5比较,可见两者要交换位置,在4与2比较,不用交换位置,好了,排序完成为[2,4,5,7,2,8],
4.之后同理,整个过程有点像打扑克牌一样!
代码实现
void insertsort(int array[],int num){
int pre,tail;
for(tail=1;tail<num;tail++){//未排序区域
int temp;
pre = tail - 1;//以排序区域
temp = array[tail];//未排序区域中要比较的值
while(pre>=0&&array[pre]>temp){//是现找到位置,在赋值,不是直接交换!
array[pre+1] = array[pre];
pre--;
}
array[pre+1] = temp;
}
printf("输出啦");
int i;
for(i=0;i<num;i++){
printf("%d",array[i]);
}
};
int main()
{
int array[9] = {5,3,4,7,2,8,6,9,1};
insertsort(array,9);
return 0;
}