插入排序学习笔记

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 *arrint 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[] = { 11232435390100 ,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.代码结果如下


以上是关于插入排序学习笔记的主要内容,如果未能解决你的问题,请参考以下文章

DOM探索之基础详解——学习笔记

插入排序学习笔记

经典排序算法学习笔记3——插入排序

数据结构与算法学习笔记(10) 排序

数据结构学习笔记——插入排序

python 学习笔记 -- 数据结构与算法 插入排序 Insertion Sort