回 帖 发 新 帖 刷新版面

主题:快速插入排序

请教大家:
    我无意中看到过快速插入排序的一片文章,现在找不到了,有没有哪个高手能把此算法说一下,多谢谢了!给出源程序当然更好!多谢

回复列表 (共4个回复)

沙发

直接插入排序是一种最基本的插入排序方法。其基本操作是将第i个记录插入到前面i-1个已排好序的记录中,具体过程为:将第i个记录的关键字Ki顺次与其前面记录的关键字Ki-1,Ki-2,…K1进行比较,将所有关键字大于Ki的记录依次向后移动一个位置,直到遇见一个关键字小于或者等于Ki的记录Kj,此时Kj后面必为空位置,将第i个记录插入空位置即可。完整的直接插入排序是从i=2开始,也就是说,将第1个记录视为已排好序的单元素子集合,然后将第二个记录插入到单元素子集合中。i从2循环到n,即可实现完整的直接插入排序。 

         直接插入排序的作法是:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。 
         第一趟比较前两个数,然后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从后向前扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描以后就完成了整个排序过程。

下面是我写的一个插入排序例程:

#include <iostream>
#include <conio.h>
using namespace std;
void main()
{
    int a[20];
    for(int k=0;k<20;k++)
        a[k]=20-k;
    cout<<"这里是原来的数:"<<endl;
    int len=sizeof(a)/sizeof(int);
    //for(int i=0;i<len;i++)
        cout<<a[0]<<" ";
    cout<<endl<<endl;            //具体可以参看基础知识的《原创插入排序》!
    cout<<"以下是增序排列:"<<endl;
    for(int i=1;i<len;i++)
    {
        int inserter=a[i];
        int index=i-1;
        while(index>=0&&a[index]>inserter)
        {
            a[index+1]=a[index];
            index--;
        }
        a[index+1]=inserter;
    }
    //for( i=0;i<len;i++)
        cout<<a[0]<<" ";
    //system("pause");
    getch();
}

板凳

//具体可以参看基础知识的《原创插入排序》!,这篇东西是我的一篇笔记

3 楼

我说的是快速插入排序,不是直接插入排序!

4 楼

快速插入排序

我来回复

您尚未登录,请登录后再回复。点此登录或注册