您的位置:首页 > 其它

8种经典排序之直接插入排序

2015-07-30 16:17 183 查看
直接插入排序是稳定的排序方法。

基本思想:

假设待排序的记录存放在数组array[1..n]中,将第一个数取出来,自己array[1]作为一个有序序列,无序序列即array[2..n]。从n=2 至 n = n为止,依次将array
插入到有序序列当中,使插入的记录也是有序的,生成含n个记录的有序序列。

具体操作:

将要插入的记录array[i]取出,保存到临时变量temp中;

找到array[ i ] (i=2,3….,n-1)的正确插入位置k (1≤ k ≤ n-1 );

将temp与array[i-1]进行比较,若temp大,则将array[i-1]向后移,直到找到比temp小的记录,将temp插入到该记录的后一位置。

如此循环n-1次,直到把这n-1个记录全部插入有序序列。

图解:



代码实现:

#include <iostream>

using namespace std;

void insert_sort(int a[] , int len)
{
int i , j , temp;
for (i = 1; i < len; i++) {
//暂时保存需要插入的那个数,因为在比较时会把a[i]的值覆盖,所以需要先保存
temp = a[i];
for (j = i - 1; j >= 0 && a[j] > temp; j--) {
//如果满足条件,则将a[j]向后移动
a[j+1] = a[j];
}
//将这个数插入有效序列
a[j+1] = temp;
}

}

void print_sort(int a[] , int len)
{
for (int i = 0;  i < len ; i++) {
cout<<a[i]<<" ";
}
cout<<endl;
}

int main(int argc, const char * argv[]) {
int a[] = {1 , 3 , 7 , 2 , 5 , 9 , 8 ,6 , 4 , 10};
cout<<"直接插入排序"<<endl;
insert_sort(a, 10);
print_sort(a, 10);

return 0;
}


结果实例:

直接插入排序

1 2 3 4 5 6 7 8 9 10

我也有看过 带哨兵的直接插入排序,不是很理解,回头再去看看,大家要是有什么好的,分享一起学习学习,共同进步。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: