算法之排序算法:插入排序(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], 至此完成插入排序的一趟排序。
设存在一个一维数组 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; } }
相关文章推荐
- 关于理解指针与函数
- C语言读取指定行文本
- C/C++函数指针
- C/C++常用算法【C语言顺序查找(随机数)】【1】
- C/C++常用算法【C语言顺序查找(随机数)】【1】
- C++函数模板的具体化和实例化
- 深度解析C++模版
- C++函数模板与类模板实例解析
- C -- C语言字符串操作
- HDOJ 2024 C语言合法标识符
- 用C++试着完成Python简明教程后面的练习
- VC++ 对话框下使用工具栏
- MFC 获得各类指针、句柄的方法
- android canvas c++ 绘图
- 设计模式C++实现:转发器-接收器模式
- Arduino 平台与C语言程序设计-week4-Arduino Programs-Lesson3
- Arduino 平台与C语言程序设计-week4-Arduino Programs-Lesson2
- C++ - memset的效率和源码分析
- C++指向类成员函数的指针详细解析
- C++运算符重载