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;
}

猜你喜欢

转载自www.cnblogs.com/SZU-DS-wys/p/12183070.html