2.1插入排序

一、概述

2.1插入排序

1、适用场景:对少量元素进行排序,当元素数量较多时,插入排序的效率低

2、算法过程的描述:现有n个无序的数,依次将第1,2,3……n个数插入到有序数列中,如下图所示:

2.1插入排序

二、算法导论代码

1、伪代码

2.1插入排序

注:伪代码中,数组下标从1开始,C++具体代码中,数组下标从0开始

2、伪代码的实现

#include 
using namespace std;

bool insertion_sort(int array[], int array_length) {  //按照从小到大排序
    int key, i;

    for (int j = 1; j < array_length; ++j) {  //j表示第j个将要插入到有序数列的数
        key = array[j];                       //使用key记录第j个数

        i = j - 1;                             //使用i记录第j个数的前一个数的位置
        while (i >= 0 && array[i] > key) {    //只有 aj < a'j-1,才执行while循环(前j-1个数是有序的, a'0 ≤ a'1 …… ≤a'j-1)
            array[i + 1] = array[i];          //将a'0,a'1,a'2,…… a'j-1中大于aj的数向右移动一个位置
            i = i - 1;                        //将i指向前一个数
        }
        array[i + 1] = key;                   //如果执行了while循环,i+1表示第j个数将要插入的位置,将第j个数插入到有序数列中
    }

    return true;
}

int main() {

    int array[10] = { 5,2,1,8,7,9,3,4,6,0 };  //初始化整型数组

    insertion_sort(array, 10);                //函数调用

    for (int index = 0; index < 10; index++)  //遍历数组
        std::cout << array[index] << endl;

    return true;
}

三、看伪代码前自己写的插入排序

#include 
using namespace std;

bool insertion_sort(int array[], int array_length) {  //和上述代码做比较,列出不足之处
    for (int j = 1; j < array_length; ++j) {

        for (int i = j - 1; i >= 0; --i) {           //当第j个数大于第j-1个数时,应该跳出循环,不应该继续循环,去比较第j个数和第j-2、j-3、……、0个数的值
            if (array[i + 1] < array[i]) {           //不跳出循环,增加了循环次数和比较次数
                int temp = array[i + 1];             //每次满足比较条件后,都会进行数据交换,增加了交换次数
                array[i + 1] = array[i];
                array[i] = temp;
            }
        }

    }

    return true;
}

int main() {

    int array[10] = { 5,2,1,8,7,9,3,4,6,0 };

    insertion_sort(array, 10);

    for (int index = 0; index < 10; index++)
        std::cout << array[index] << endl;

    return true;
}

Original: https://www.cnblogs.com/asdzy/p/16500819.html
Author: 阿斯顿之意
Title: 2.1插入排序

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/683542/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球