排序演算法(三)

2021-08-30 11:20:18 字數 2159 閱讀 5647

6、歸併排序

原理:將兩個及以上的有序表合併成乙個有序表。將待排序列分成若干個序列,將各個小序列排成有序,最後合併將整個有序序列。基本思路,開始,將相鄰兩個元素合併成乙個有序序列,然後,相鄰兩個序列再合併成乙個有序序列,不斷迴圈,直到整個序列合併為乙個有序序列。

示例如下:

**實現:

public class mergesort else

}while(left <= middle)

while (mid <= right)

while(i <= right)

}public static void mergesort(int arr,int left,int right)

}public static void main(string args);//test

mergesort(arr,0,arr.length-1);

system.out.println(arrays.tostring(arr));}}

演算法分析:

(1)效能分析

(2)時間複雜度

歸併排序的形式是一棵二叉樹,它遍歷的次數就是二叉樹的深度,根據完全二叉樹可以得到它的時間複雜度為o(nlog2n);

(3)穩定性

歸併排序中,相等元素的前後順序不會改變,所以它是一種穩定的演算法。

(4)空間複雜度

在排序過程中,需要大小為n的空間儲存整個序列,所以其空間複雜度為o(n)。

7、堆排序

原理:堆排序是一種樹形排序演算法,利用堆(順序儲存的完全二叉樹)進行排序,利用大根堆(或小根堆)堆頂記錄最大(或最小)的特徵,使得在無序區中獲得最大(或最小)記錄變得簡單。堆是一棵順序儲存的完全二叉樹,若每個節點的值小於或等於其左右孩子節點的值,稱為小根堆;每個節點大於等於其左右孩子節點的值,稱為大根堆。

舉例來說,對於序列,滿足下列條件之一,稱為堆:

(1) 當ri <= r2i+1 && ri <= r2i+2,稱為小根堆; 

(2) 當ri >= r2i+1 && ri >= r2i+2,稱為大根堆;

思想:(1) 將原始陣列構建堆公升序排列構建大根堆(降序排列構建小根堆),從最後乙個節點開始調整,構建初始堆;

(2) 每一次交換r0和rn,輸出rn(最大元素),再把剩下元素調整為大根堆,當輸出最後乙個元素,則排序完成(公升序排列)。

舉例如下:

初始序列為:

**如下:

public class heapsort 

//若父節點大於等於孩子節點的值,結束

if(temp >= arr[child])

arr[parent] = arr[child];

//選取孩子節點的左孩子節點,繼續向下篩選

parent = child;

child = 2*parent+1;

}arr[parent] = temp;

}public static void headsort(int arr)

//將最後乙個元素與第乙個元素交換

for(int i = arr.length-1;i > 0;i--)

}public static void main(string args);

system.out.print("排序前:");

system.out.println(arrays.tostring(arr));

headsort(arr);

system.out.print("排序後:");

system.out.println(arrays.tostring(arr));}}

演算法分析:

(1)效能分析

(2)時間複雜度

堆的儲存表示是順序的(完全二叉樹是順序儲存的),當需要對第k個最小的元素之前的部分序列進行排序,最好用堆排序。

(3)穩定性

堆排序是一種不穩定的演算法,在篩選調整時,有可能對於相同的元素排在後面的交換到前面來。

排序演算法(三) 選擇排序演算法

選擇排序演算法首先從序列中選擇乙個元素arr i 通常是第乙個 作為當前最小值,然後把arr i 依次與序列中arr i 之後的元素作比較,如果有元素小於arr i 的,就讓它跟arr i 交換。然後再選擇arr i 1 作為下一輪比較的最小值,然後繼續比較.選擇排序演算法原理很簡單,就是每次把未排...

排序演算法(三)

對於輸入的資料x存入標記為x的陣列中,並統計x的個數。適用於資料範圍小,資料量大的情況。演算法的步驟如下 1.找出待排序的陣列中最大和最小的元素 2.統計陣列中每個值為i的元素出現的次數,存入陣列c的第i項 3.對所有的計數累加 從c中的第乙個元素開始,每一項和前一項相加 4.反向填充目標陣列 將每...

排序演算法(三)

希爾排序是1959年由d.l.shell提出來的,相對直接排序有較大的改進。希爾排序又叫縮小增量排序。基本思想 基本思想 演算法先將要排序的一組數按某個增量d n 2,n為要排序數的個數 分成若干組,每組中記錄的下標相差d.對每組中全部元素進行直接插入排序,然後再用乙個較小的增量 d 2 對它進行分...