还剩5页未读,继续阅读
文本内容:
选择排序ch5-3选择排序,是通过每次选择最小的数或者最大的数,然后将它放在它应i.该出现的位置上那么,选择排序可不可以进行优化呢?如果我们在每一次查找最小值的时候,也找到一个最大值,然后将两者分别放在它们应该出现的位置,这样遍历的次数就可以减少一半下面给出代码实现void SelectSortinta[],int nint left=0;int right=n-1;〃存储最小值的下标int min=I eft;〃存储最大值的下标int max=left;whileleft=rightmin=left;max=left;forfint i=left;i=right;++iifa[i]a[min]min=i;max=i;}〃交换和a[left]a[min]代==ifle maxmax=min;〃交换和a[right]a[max]++left;-right;源自.快速排序算法2快速排序由在年提出它的基本思想是通过一C.A.R.Hoare1962趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列c语百版本void sortint*a,intleft,int rightL=right/*如果左边索引大于或者等于右边的索引就代表已经整理完成一个组了*/return;int i=left;int j=right;int key=a[left];whileij/*控制在当组内寻找一遍*/whileijkey=a[j]尸而寻找结束的条件就是,1,找到一个小于或者大于hy的数大于或小于取决于你想升序还是降序2,没有符合条件1的,并且i与j的大小没有反转*/»・;/*向前寻找*/:至口¥行锋的数后就把它蛾给前面的被拿走的i的值如果第一次循环且key是21a[left],那么就是给key*/222324whileijkey=a[i]25/*这是i在当组内向前寻找,同上,不过注意与key的大小关系停止循环和上面相反,26因为排序思想是把额往两边扔,所以左右两边的数大小与kuy的关系相反〃2728293031a[j]=a[i];323334a[i]=key;/*当在当组内找完一遍以后就把中间数key回归*/35sort left,i-1;/*最后用同样的方式对分出来的左边的小组进行同上的做法*/ajsorta,i+1,right;/*用同样的方式对分出来的右边的小组进行同上的做法〃/*当然最后可能会出现很多分左右,直到每一组的i=j为止〃}源自百度百科“快速排序”〃快速排序算法快速排序http:fromtitle=fromid=2084344type=syn插入法排序
3.插入法是一种比较直观的排序方法它首先把数组头两个元素排好序,再依次把后面的元素插入适当的位置把数组元素插完也就完成了排序void insertinta[],int nint i,j,temp;fori=l;in;i++{为要插入的元素*/temp=a[i];/*temp87654321098765434111111111;j=i-lwhilej=Otempa[j]{/*从开始找比小的数,同时把数组元素向后移*/a[i]a[j+l]=a[j];;j-插入*/a[j+l]=temp;/*希尔法排序
4.Shell希尔排序是插入排序的一种也称缩小增量排序,是直接Shell Sort插入排序算法的一种更高效的改进版本希尔排序是非稳定排序算法该方法因于年提出而得名DL.Shell1959希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至时,整个文件恰被分成一组,算法便终止1源自百度百科“希尔排序”〃希尔排序http:它首先把相距的那几个元素排好序,再缩小值一般取其一kk=l k半,再排序,直到时完成排序下面让我们来分析其代k=l码:void shellfint*ajnt ninti,j,k,x;间距值*/k=n/2;/*whilek=l{fori=k;in;i++{x=a[i];j=i-k;whilej=Oxa[j]{a[j+k]=a[j];j-=k;}a[j+k]=x;}缩小间距值*/k/=2;/*视觉直观感受中排序算法,文中介绍了快速排序、归并排序、堆排
5.7序、选择排序、冒泡排序、插入排序、希尔排序的算法思路,并通过动态图直观展示了中排序算法的实施效果7网址。
个人认证
优秀文档
获得点赞 0