C语言数据结构和算法分析

C++中级算法第二天(插入排序)

2019-03-16  本文已影响36人  权的小树洞

昨天太忙了就忘记了发这一篇文章了,所以今天赶紧的补上了这一章
今天要写的是插入排序,老规矩,我们先讲一下什么是

插入排序?

每次从没有排序的数据列表中取出第一个元素,把它插入到有序表的合适位置, 使有序表仍然有序。
演示图

这张图就是小编画的一张图,虽然简陋,但是我们还是很容易的了解插入排序的原理,其实也很简单,就是我们讲后面小的数据往前面排,将大的数据向后挤,就是所谓的插入排序了,多跑几次数据,就能将所有的数据排完
分析:
1.每次排序将有序列表选择性向右排序
2.确定插入数据的位置
我们做一个循环,假如后位的数据小于前位的数据,则我们后位的数据是需要往前排序的,这个是很简单做到的,然后就是我们需要将已经排好了序的数据,向后移动,这个移动也是需要判断的,当移动到,比后位数据小的时候就不需要移动了,然后将这个后位数据插入到有序列表里面去,我们就完成了一次的插入排序,等这个循环结束,我们就可以将所有的数据排好

#include<iostream>

using namespace std;

void print(int a[], int n) {

    for (int j = 0; j < n; j++) {
        cout << a[j] << "  ";
    }

    cout << endl;

    return;
}

void insert_Sort(int array[], int n) {

    for (int i = 1; i < n; i++) {

        if (array[i]/*后位*/ < array[i - 1]/*前位*/) {

            int temp = array[i]/*后位*/;
            int k/*前位*/ = i - 1;

            for (int j = k; j >= 0 && temp < array[j]; j--) {

                array[j + 1] = array[j];
                k--;
                print(array, 8);
            }

            array[k + 1] = temp;//插入第i位的值
        }
    }
}

int main() {

    int a[8] = { 3,1,5,7,2,4,9,6 };
    cout << "初始值:";

    for (int j = 0; j < 8; j++) {
        cout << a[j] << "  ";
    }

    cout << endl << endl;
    insert_Sort(a, 8);
    cout << "排序后:";
    print(a, 8);

    return 0;
}

下一个排序,马上就来了哦
请支持我,每天更新不同的算法!
谢谢你们的支持!

上一篇 下一篇

猜你喜欢

热点阅读