1、6. min=i;/将当前下标定义为最小值下标7. j=i+1;jaj)9. min=j;/记录当前最小下标10. if(i!=min)11. swap(ai,amin);如果i不是最小下标则交换12. 13. print(a,size);14. 2,冒泡排序依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小
2、于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。BubbleSort(intsize-1;j=0;size-1-i;if(ajaj+1)swap(aj,aj+1);10. 优化:使用标志的冒泡排序, 因为当一次遍历时 没有发生任何的交换 事实上证明数组排序已经完成 函数可以退出BubbleSortWithFlag(intboolflag;4. for(intflag=true;flag=false;14. 15. if(flag
3、=true)16. 17. 18. return;19. 20. 21. 鸡尾酒排序 :冒泡排序的变形 (转)鸡尾酒排序等于冒泡排序的轻微变形,不同的地方在于从低到高然后从高到低,而冒泡排序则仅从低到高去比较序列里的每个元素。他可以得到比冒泡排序稍微好一点的效能,原因是冒泡排序只从一个方向进行比对(由低到高),每次循环只移动一个项目。以序列(2,3,4,5,1)为例,鸡尾酒排序只需要访问两次(升序降序各一次 )次序列就可以完成排序,但如果使用冒泡排序则需要四次。(1)先对数组从左到右进行冒泡排序(升序),则最大的元素去到最右端;(2)再对数组从右到左进行冒泡排序(降序),则最小的元素去到最左端
4、。以此类推,依次改变冒泡的方向,并不断缩小未排序元素的范围。CockSort(intlow=0;up=size-1;index=0;while(lowai+1)swap(ai,ai+1);index=i;up=index;i=up;ilow;i-)if(aiai-1)swap(ai,ai-1);21. low=index;22. 23. 24. 3,插入排序 (直接,折半,路插入,表插入)依次取出便利每一项 将每一项temp=aj和其之前的数进行比较,如果发现了比自己大的数 就将其放在当前j的位置 同时j-,继续用temp和之前的数进行比较,直到没有比自己大的数时结束。1. /直接插入排序2.
5、 voidinsertSort(int3. if(size0&tempaj-1;j-)aj=aj-1;aj=temp;18. 折半插入排序:折半插入排序(binary insertion sort)是对插入排序算法的一种改进,由于排序算法过程中,就是不断的依次将元素插入前面已排好序的序列中。由于前半部分为已排好序的数列,这样我们不用按顺序依次寻找插入点,可以采用折半查找的方法来加快寻找插入点的速度。折半插入排序算法的具体操作为:在将一个新元素插入已排好序的数组的过程中,寻找插入点时,将待插入区域的首元素设置为alow,末元素设置为ahigh,则轮比较时将待插入元素与am,其中m=(low+hi
6、gh)/2相比较,如果比参考元素小,则选择alow到am-1为新的插入区域(即high=m-1),否则选择am+1到ahigh为新的插入区域(即low=m+1),如此直至low=high不成立,即将此位置之后所有元素后移一位,并将新元素插入ahigh+1。binaryInsertSort(intlow,high,m,temp,j;for(int+i)high=i-1;/*/这句话可以稍微优化一下下速度不影响结果continue;*/while(low=high)m=(low+high)/2;if(temp=temp的值的位置而是=temp的值的左边的位置所以.elselow=m+1;high+
7、1;-j)/所以这里的high要加一哇22. 4,希尔排序希尔算法思想:将整个无序序列分割成若干小的子序列分别进行插入排序。如 一个长度为13的数组81 9411 96123517 952858417515先以13/2=5为gap进行比较 即对(81 35 41)(94 17 75)(11 95 15)分别进行排序 即对数组进行一次间距为5的插入排序之后以3 和 1为间距 对数组进行插入排序shellSort(int代码取自数据结构于问题求解(c+版)gap=size/2;gap0;gap=gap=2?1:static_cast(gap/2.2)这里计算出当前的间距i=gap;这里跟插入排序的代码一样不过不在是每次与前一位比较而是与前gap位进行比较for(j=i;=gap&j-=gap)aj=aj-gap;1
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1