DS内排—直插排序

Posted szu-ds-wys

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DS内排—直插排序相关的知识,希望对你有一定的参考价值。

题目描述

给定一组数据,使用直插排序完成数据的升序排序。

--程序要求--

若使用C++只能include一个头文件iostream;若使用C语言只能include一个头文件stdio

程序中若include多过一个头文件,不看代码,作0分处理

 

不允许使用第三方对象或函数实现本题的要求

 

输入

数据个数n,n个数据

 

输出

直插排序的每一趟排序结果

 

样例输入

7 34 23 677 2 1 453 3

样例输出

23 34 677 2 1 453 3 23 34 677 2 1 453 3 2 23 34 677 1 453 3 1 2 23 34 677 453 3 1 2 23 34 453 677 3 1 2 3 23 34 453 677

提示

#include<iostream>
using namespace std;
#define INF 0x7f
int n;
void printarray(int *array)
{
    for(int i=0;i<n;i++)
    {
        if(i!=n-1)
            cout<<array[i]<<" ";
        else
            cout<<array[i]<<endl;
    }
}
void Insertsort(int *array)
{
    int i,j,temp;
    for(i=1;i<n;i++)
    {///第一个元素已经放入作为已排序序列的第一个元素
        temp=array[i];///依次取出未排序序列的第一个元素
        for(j=i;j>=1&&array[j-1]>temp;j--)
        {///依次与已排序序列中元素比较并右移
            array[j]=array[j-1];
        }
        array[j]=temp;///此时j处腾空,放入待排序元素
        printarray(array);
    }
}
 
int main()
{
    cin>>n;
    int *array=new int[n];
    for(int i=0;i<n;i++)
        cin>>array[i];
    Insertsort(array);
    delete []array;
    return 0;
}

以上是关于DS内排—直插排序的主要内容,如果未能解决你的问题,请参考以下文章

数据结构 排序

DS内排—堆排序

DS内排—2-路归并排序

常见排序算法

11.4 置换-选择排序

几种常用排序整理