您的位置:首页 > 编程语言 > C语言/C++

算法之排序算法:插入排序(C++)

2015-12-11 15:25 99 查看
算法原理

设存在一个一维数组 array
, 第 i 趟排序是将数组中下标为 i的元素插入到一个已经按值有序排列的子序列的合适位置。

(1)插入排序开始时, 第一个元素看成有序序列,从下标为 i = 1 的第二个元素开始,每一趟排序都将下标为 i 的元素插入到之前的有序序列中,然后 i = i + 1 进行下一个元素的插入排序,由此可见插入排序需要 n - 1 趟排序

(2)每次寻找插入元素 array[i] 的位置时是从有序序列的最后一个元素 array[i-1] 开始查找,直到找到某一位置的元素 array[j] (j >= 0 && j <= i-1)满足 array[j] <= array[i], 那么下标为

j + 1 的位置就应该是插入元素 array[i]的合适位置。从有序序列的最后一个元素开始查找,边查找边移动元素,而不是先找到插入位置再移动元素,这样提高了效率。

(3)将array数组中下标 [j + 1, i - 1]的所有元素依次后移一位,空出 array[j+1]的位置。

(4) 将array[i] 元素赋值给 array[j+1], 至此完成插入排序的一趟排序。

#include<iostream>
using namespace std;

#define MaxSize 1000

void InsertSort(int array[], int m);

int main()
{
int number;
int array[
4000
MaxSize];//
//
cout << "请输入需要排序的数据数:";
cin >> number;
cout << "请输入需要排序的数据:";
for (int i = 0; i < number; i++)
{
cin >> array[i];
}

//对array数组通过插入算法实现升序排序
InsertSort(array,number);

//输出排序后的数组array
cout << "排序后的数据为:";
for (int i = 0; i < number; i++)
{
cout << array[i]<< " ";
}
cout << endl;
}

void InsertSort(int array[],int m)
{
for (int i = 1; i < m; i++)
{
int j = i - 1;
int temp = array[i];
while (temp<array[j] && j>=0)
{
array[j+1] = array[j];
j--;
}
array[j+1] = temp;
}
}


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: