小朋友学数据结构(8):直接插入排序
2018-06-19 本文已影响44人
海天一树X
(一)基本思想
在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
1-1.jpg(二)C语言代码实现
#include<stdio.h>
void insertSort(int a[], int n)
{
int i, j, temp;
for (i = 1; i < n; i++)
{
temp = a[i];
j = i;
// 将大于temp的值整体后移一个单位
while(j > 0 && a[j-1] > temp)
{
a[j] = a[j-1];
j--;
}
a[j]=temp;
}
}
int main()
{
int arr[] = {57, 68, 59, 52};
int len = sizeof(arr) / sizeof(int);
insertSort(arr, len);
int i = 0;
for(; i < len; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
运行结果:
52, 57, 59, 68
程序分析:
for循环中,
(1) i = 1, temp = a[1] = 68, j = 1, a[0] = 57, a[0] > temp不成立,不需要调整
(2)i = 2,temp = a[2] = 59,
① j = 2,a[1] = 68 > temp,执行循环a[2] = a[1] = 68,j自减。
② j = 1, a[0] = 57 > temp不成立,循环结束。
③ 最后执行a[1] = temp = 59,此时arr = {57,59,68,52}
(3)i = 3,temp = a[3] = 52
① j = 3, a[2] = 68 > temp,执行循环a[3] = a[2] = 68,j自减
② j = 2,a[1] = 59 > temp,执行循环a[2] = a[1] = 59,j自减
③ j = 1,a[0] = 57 > temo,执行循环a[1] = a[0] = 57,j自减后变为0,循环结束
④ 最后执行a[0] = temp = 52,此时a= {52, 57, 59, 68}
TopCoder & Codeforces & AtCoder交流QQ群:648202993
更多内容请关注微信公众号
wechat_public_header.jpg