欢迎来到天天文库
浏览记录
ID:18475907
大小:57.00 KB
页数:9页
时间:2018-09-18
《排序算法的分类如下》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、//**/*/*排序算法的分类如下:*1.插入排序(直接插入排序、折半插入排序、希尔排序);*2.交换排序(冒泡泡排序、快速排序);*3.选择排序(直接选择排序、堆排序);*4.归并排序;*5.分配排序(基数排序、箱排序)。***关于排序方法的选择:*(1)若n较小(如n≤50),可采用直接插入或直接选择排序。*当记录规模较小时,直接插入排序较好;否则因为直接选择移动的记录数少于直接插人,应选直接选择排序为宜。*(2)若文件初始状态基本有序(指正序),则应选用直接插人、冒泡或随机的快速排序为宜;*(3)若n较大,则应采用时间复杂度为O(nlgn)的排序方法:
2、快速排序、堆排序或归并排序。*快速排序是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短;*堆排序所需的辅助空间少于快速排序,并且不会出现快速排序可能出现的最坏情况。这两种排序都是不稳定的。*若要求排序稳定,则可选用归并排序。但本章介绍的从单个记录起进行两两归并的排序算法并不值得提倡,通常可以将它和直接插入排序结合在一起使用。先利用直接插入排序求得较长的有序子文件,然后再两两归并之。因为直接插入排序是稳定的,所以改进后的归并排序仍是稳定的。*/namespaceSort{abstractclassSort{pu
3、blicabstractvoidSortArray(int[]data);protectedvoidswap(int[]data,inti,intj){if(data.Length>=j&&data.Length>=i){inttemp=data[i];data[i]=data[j];data[j]=temp;}}}classBubbleSort:Sort{//////冒泡排序----交换排序的一种方法:相邻两元素进行比较,如有需要则进行交换,///每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其他的数进行类似操作。/
4、//性能:比较次数O(n^2),n^2/2;交换次数O(n^2),n^2/4///publicoverridevoidSortArray(int[]data){//比较的伦数for(inti=1;idata[j+1]){//交换相邻两个数swap(data,j,j+1);}}}Console.WriteLine("冒泡排序:");for(inti=0;i5、;i++){Console.WriteLine(data[i]+"");}Console.WriteLine();}}/////////快速排序//////快速排序使用分治法(Divideandconquer)策略来把一个序列(list)分为两个子序列(sub-lists)。步骤为:///1.从数列中挑出一个元素,称为"基准"(pivot),///2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,该基准是它的最后位置。这个称为分割(partition)操作。//6、/3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。///递回的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递回下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。///classQuictSort:Sort{publicoverridevoidSortArray(int[]data){//采用递归法进行快速排序qsort(data,0,data.Length-1);Console.WriteLine("快速排序:");f7、or(intk=0;kx){j--;//从右向左找第一个小于8、x的数}if(i
5、;i++){Console.WriteLine(data[i]+"");}Console.WriteLine();}}/////////快速排序//////快速排序使用分治法(Divideandconquer)策略来把一个序列(list)分为两个子序列(sub-lists)。步骤为:///1.从数列中挑出一个元素,称为"基准"(pivot),///2.重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,该基准是它的最后位置。这个称为分割(partition)操作。//
6、/3.递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。///递回的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递回下去,但是这个算法总会结束,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。///classQuictSort:Sort{publicoverridevoidSortArray(int[]data){//采用递归法进行快速排序qsort(data,0,data.Length-1);Console.WriteLine("快速排序:");f
7、or(intk=0;kx){j--;//从右向左找第一个小于
8、x的数}if(i
此文档下载收益归作者所有