主题:快速插入排序
czymj
[专家分:0] 发布于 2007-05-09 09:19:00
请教大家:
我无意中看到过快速插入排序的一片文章,现在找不到了,有没有哪个高手能把此算法说一下,多谢谢了!给出源程序当然更好!多谢
回复列表 (共4个回复)
沙发
唐姓少年 [专家分:150] 发布于 2007-05-10 20:28:00
直接插入排序是一种最基本的插入排序方法。其基本操作是将第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();
}
板凳
唐姓少年 [专家分:150] 发布于 2007-05-10 20:29:00
//具体可以参看基础知识的《原创插入排序》!,这篇东西是我的一篇笔记
3 楼
czymj [专家分:0] 发布于 2007-05-12 16:34:00
我说的是快速插入排序,不是直接插入排序!
4 楼
czj779 [专家分:100] 发布于 2007-05-12 16:36:00
快速插入排序
我来回复