排序

2020-11-18  本文已影响0人  dxin_101

排序算法总结:https://www.runoob.com/w3cnote/sort-algorithm-summary.html

一.冒泡排序:英文(BubbleSort)平均时间复杂度:O(n2)

1.基本思想:两个数比较大小,较大的数下沉,较小的数冒起来。

2.过程:(1)比较相邻的两个数据,如果第二个小,就交互位置。(2)从后向前两两比较,一直到比较最前两个数据。最终最小数被交换到起始的位置,这样第一个最小数的位置就排好了。(3)继续重复上述过程,依次将第2.3...n-1个最小数排好位置。

代码范例:是第一个数和最后一个数的比较

这样排序有个问题:数据的顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到arr.length-1次,后面的比较没有意义的。

我们针对这个问题,我们解决方案是:就是给排序的的数据加标示符,例如给他加Bool 类型的,比较过了就是ture ,没有的是false。

代码范例:

二.选择排序:英文(SelctionSort)平均时间复杂度:O(n2)

1.基本思想:在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;第二次遍历n-2个数,找到最小的数值与第二个元素交换;第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。

3.插入排序:英文(Insertion Sort) 平均时间复杂度:O(n2)

基本思想:在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

4.哈希排序:英文 (Shell Sort)  平均时间复杂度O(n1.5)

基本思想:在要排序的一组数中,根据某一增量分为若干子序列,并对子序列分别进行插入排序。

然后逐渐将增量减小,并重复上述过程。直至增量为1,此时数据序列基本有序,最后进行插入排序。


5.快速排序:英文:(Quicksort)    平均时间复杂度 O(N*logN)

6.归并排序:英文:(Merge Sort) 平均时间复杂度 O(N*logN)

基本思想:归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。首先考虑下如何将2个有序数列合并。这个非常简单,只要从比较2个数列的第一个数,谁小就先取谁,取了后就在对应数列中删除这个数。然后再进行比较,如果有数列为空,那直接将另一个数列的数据依次取出即可。

7.堆排序(HeapSort)

平均时间复杂度:O(NlogN)

由于每次重新恢复堆的时间复杂度为O(logN),共N - 1次重新恢复堆操作,再加上前面建立堆时N / 2次向下调整,每次调整时间复杂度也为O(logN)。二次操作时间相加还是O(N * logN)

8.基数排序(RadixSort)

基本思想:BinSort想法非常简单,首先创建数组A[MaxValue];然后将每个数放到相应的位置上(例如17放在下标17的数组位置);最后遍历数组,即为排序后的结果。

public static void RadixSort(int A[],int temp[],int n,int k,int r,intcnt[]){

   //A:原数组

   //temp:临时数组

   //n:序列的数字个数

   //k:最大的位数2

   //r:基数10

   //cnt:存储bin[i]的个数

   for(int i=0 , rtok=1; i<k ; i++ ,rtok = rtok*r){

       //初始化

       for(int j=0;j<r;j++){

           cnt[j] = 0;

       }

       //计算每个箱子的数字个数

       for(int j=0;j<n;j++){

           cnt[(A[j]/rtok)%r]++;

       }

       //cnt[j]的个数修改为前j个箱子一共有几个数字

       for(int j=1;j<r;j++){

           cnt[j] = cnt[j-1] + cnt[j];

       }

       for(int j = n-1;j>=0;j--){ //重点理解

           cnt[(A[j]/rtok)%r]--;

           temp[cnt[(A[j]/rtok)%r]] = A[j];

       }

       for(int j=0;j<n;j++){

           A[j] = temp[j];

       }

   }

}

9.递归排序

这上面写的舒服:https://www.runoob.com/w3cnote/sort-algorithm-summary.html

上一篇下一篇

猜你喜欢

热点阅读