预览加载中,请您耐心等待几秒...
1/9
2/9
3/9
4/9
5/9
6/9
7/9
8/9
9/9

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

1.1直接插入排序基本思想:每次将一个待排序额记录按其关键码的大小插入到一个已经排好序的有序序列中,直到全部记录排好序。图解:代码实现:[cpp]viewplaincopy//直接顺序排序voidInsertSort(intr[],intn){for(inti=2;i<n;i++){r[0]=r[i];//设置哨兵for(intj=i-1;r[0]<r[j];j--)//寻找插入位置r[j+1]=r[j];//记录后移r[j+1]=r[0];}for(intk=1;k<n;k++)cout<<r[k]<<"";cout<<"\n";}1.2希尔排序基本思想是:先将整个待排序记录序列分割成若干个子序列,在在序列内分别进行直接插入排序,待整个序列基本有序时,再对全体记录进行一次直接插入排序。图解:代码实现:[cpp]viewplaincopy<spanstyle="font-size:14px;">//希尔排序voidShellSort(intr[],intn){inti;intd;intj;for(d=n/2;d>=1;d=d/2)//以增量为d进行直接插入排序{for(i=d+1;i<n;i++){r[0]=r[i];//暂存被插入记录for(j=i-d;j>0&&r[0]<r[j];j=j-d)r[j+d]=r[j];//记录后移d个位置r[j+d]=r[0];}}for(i=1;i<n;i++)cout<<r[i]<<"";cout<<"\n";}</span>二交换排序2.1起泡排序起泡排序是交换排序中最简单的排序方法,其基本思想是:两两比较相邻记录的关键码,如果反序则交换,直到没有反序的记录为止。图解:代码实现:[cpp]viewplaincopy<spanstyle="font-size:14px;">//起泡排序voidBubbleSort(intr[],intn){inttemp;intexchange;intbound;exchange=n-1;//第一趟起泡排序的范围是r[0]到r[n-1]while(exchange)//仅当上一趟排序有记录交换才进行本趟排序{bound=exchange;exchange=0;for(intj=0;j<bound;j++)//一趟起泡排序if(r[j]>r[j+1]){temp=r[j];r[j]=r[j+1];r[j+1]=temp;exchange=j;//记录每一次发生记录交换的位置}}for(inti=0;i<n;i++)cout<<r[i]<<"";cout<<"\n";}</span>基本思想:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。图解:代码实现:[cpp]viewplaincopy//快速排序一次划分intPartition(intr[],intfirst,intend){inti=first;//初始化intj=end;inttemp;while(i<j){while(i<j&&r[i]<=r[j])j--;//右侧扫描if(i<j){temp=r[i];//将较小记录交换到前面r[i]=r[j];r[j]=temp;i++;}while(i<j&&r[i]<=r[j])i++;//左侧扫描if(i<j){temp=r[j];r[j]=r[i];r[i]=temp;//将较大记录交换到后面j--;}}returni;//i为轴值记录的最终位置}//快速排序voidQuickSort(intr[],intfirst,intend){if(first<end){//递归结束intpivot=Partition(r,first,end);//一次划分QuickSort(r,first,pivot-1);//递归地对左侧子序列进行快速排序QuickSort(r,pivot+1,end);//递归地对右侧子序列进行快速排序}}三选择排序3.1简单选择排序基本思想:设所排序序列的记录个数为n。i取1,2,…,n-1,从所有n-i+1个记录(Ri,Ri+1,…,Rn)中找出排序码最小的记录,与第i个记录交换。执行n-1趟后就完成了记录序列的排序。图解:代码实现:[cpp]viewplaincopy//简单选择排序voidSelectSort(i