title: Insert_sort
date: 2019-03-21 22:42:51
tags:
title: Insert_sort
date: 2019-03-20 10:07:39
catrgories:Algorithm ranking
tags:
description:直接插入排序算法的实现
直接插入排序是稳定的算法。
- 直接插入排序的基本思想:
假设待排序的记录存放在数 组R[1…n]中。初始时,R[1]自成1个有序区,无序区为R[2…n]。
从i=2起至i=n为止,依次将R[i]插入当前的有序区R[1…i-1]中,生成含n个记录的有序区。
第i-1趟直接插入序列;
即可以理解为R被划分成两个子区间,已经排好序的R[1…i-1]与待排序区间R[i…n].
插入排序就是将待排序区间中的每个记录插入到有序区的合适位置,使R[1…i-1]变为新的有序区R[1…i].
可以理解为进行扑克游戏使,每位玩家整理手牌的过程。
2.排序方法:
(1)在当前有序区R[1…i-1]中查找R[i]的正确插入位置k(1<=k<=i-1).
(2) 将R[k…i-1]中的记录均后移一个位置,腾出k位置上的空间插入R[i].
这里我们将使用升序排序,也就是说,如果R[i]的关键字大于等于R[1…i-1]中所有记录的关键字,则R[i]就是插入的位置
或者查找比较操作和记录移动操作交替的进行。
实现:
#include
using namespace std;
//直接插入排序
void Insert_sort(int a[], int n)
{
int i, j, temp;
for (i = 1; i < n; i++)//进行n-1次的选择
{
temp = a[i];
for (j = i - 1; j >= 0 && temp < a[j]; j–)
{
a[j + 1] = a[j];
}
a[j+1] = temp;
}
}
void print_array(int a[], int len)
{
for (int i = 0; i < len; i++)
{
cout << a[i] << ’ ';
}
cout << endl;
}
int main()
{
int a[] = { 7,3,5,8,9,1,2,4,6 };
cout << “before Insert_sort:”;
print_array(a, 9);
Insert_sort(a, 9);
cout << “after Insert_sort:”;
print_array(a, 9);
system(“pause”);
return 0;
}