算法学习之旅,中级篇(2)-–插入排序

来源:互联网 发布:提醒功能的软件 编辑:程序博客网 时间:2024/06/05 22:50

介绍
每次从无序表中取出第一个元素,把它插入到有序表中的合适位置。
分析
第一趟:比较前两个数的大小,然后把其中最小的插入排在第一个位置。
第二趟:比较第三个数与前两个数的大小,大的数后移,知道遇到小的,便插入到较小数的后面,数不再移动。
依次进行,进行了N-1躺后,就完成了整个排序过程。
代码

#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--;            }            array[k+1]=temp;        }    }}int main(){    int a[8]={3,2,4,5,7,1,2,9};    cout<<"初始值: ";    for(int j=0;j<8;j++)        cout<<a[j]<<" ";    cout<<endl<<endl;    insert_Sort(a,8);    print(a,8);    system("pause");    return 0;}

遇到的问题
插入排序是稳定的排序算法。最坏的时间复杂度是逆序o(n^2)。