插入排序学习笔记
Posted 药菌
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序学习笔记相关的知识,希望对你有一定的参考价值。
1.直接插入排序
直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。首先在当前有序区R[1..i-1]中查找R[i]的正确插入位置k(1≤k≤i-1);然后将R[k..i-1]中的记录均后移一个位置,腾出k位置上的空间插入R[i]。直接插入排序算法的时间复杂度O(n^2),空间复杂度为O(1)。
排序步骤:
1.第1个元素当做已经排序,看作一个有序序列;
2.取出下一个元素(利用哨兵保存),在已经排序的元素序列中从后向前遍历比较;
3.如果哨兵(下一元素)小于该元素(已排序),将该元素移到下一位置;
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
5.将新元素插入到该位置后;
6.重复步骤2~5,直到排序完成;
2.代码实现
1#include <iostream>
2using namespace std;
3
4//输出函数
5template <class T>
6void printArr(T *arr, int length)
7{
8 for (int i = 0; i < length; ++i)
9 {
10 cout << arr[i] << " ";
11 }
12 cout << endl;
13}
14
15//插入排序
16void straisort(int arr[], int n)
17{
18 int i, j;
19 for (i = 1;i < n; ++i)
20 {
21 int temp= arr[i];//防止覆盖,使用哨兵保留待排序元素
22 j = i - 1;
23 while (temp < arr[j])
24 {
25 arr[j + 1] = arr[j];//当前元素向后拷贝移动,空出位置
26 j--;
27 }
28 arr[j + 1] = temp;//空出位置插入待排序元素
29
30 cout << "第" << i << "次排序后:" << endl;
31 printArr(arr, 10);
32 }
33}
34
35int main()
36{
37 int a[] = { 11, 2, 32, 43, 5, 3, 90, 100 ,8,7};
38
39 cout << "排序前:" << endl;
40 printArr(a, 10);
41 cout << endl;
42 straisort(a, 10);
43
44 //cout << "排序后:" << endl;
45 //printArr(a, 10);
46
47 system("pause");
48 return 0;
49}
3.代码结果如下
以上是关于插入排序学习笔记的主要内容,如果未能解决你的问题,请参考以下文章