1、二路歸併排序
/** 二路歸併排序
* 思路:利用分治思想,對原陣列進行二分分段,使元素在每一小段內有序,然後逐漸合併
* 如,最小分段是2,先2內有序,合併為4,4內有序。。。。
** 時間複雜度:o(nlogn)
* 空間複雜度:o(n)需要乙個額外的陣列作為臨時儲存
*/static void mergesort(int array, int helper, int left, int right)
while (helperleft <= mid && helperright <= right)
while (helperleft <= mid)
array[cur++] = helper[helperleft++];
}2、快速排序
/** 快速排序
* 思路:先選擇乙個哨兵元素,然後後往前遍歷,遇到比哨兵小的元素停止,從前往後進行遍歷,
* 遇到比哨兵元素大的元素停止,交換兩個元素,繼續,直到前後相遇,此時交換相遇點的元素
* 和哨兵元素,一趟排序下來,可以確保哨兵元素左邊的元素比哨兵小,右邊的元素比哨兵大(公升序排序);
* 然後分區間再繼續上述過程
* 注意:通常選取左邊界作為哨兵元素,此時,必定先進行從後往前的移動,否則不對稱缺項會出錯
** 時間複雜度:平均o(nlogn) 最差o(n^2)
* 空間複雜度:o(logn)交換時需要乙個額外的空間,一共交換logn次
*/static void quicksort(int array, int left, int right)
}array[left] = array[i];
array[i] = pivot;
quicksort(array, left, i - 1);
quicksort(array, i + 1, right);
}3、堆排序
/** 堆排序
*///調整堆,larger=true大頂堆,否則為小頂堆
static void adjustheap(int array, int parent, int length, bool large) else
//把孩子節點的值賦給父節點
array[parent] = array[child];
//選取孩子節點的左孩子節點,繼續向下篩選
parent = child;
child = child * 2 + 1;
array[parent] = pivot; }}
/** 初始化堆
* 調整之後,第乙個元素為序列的極值
*/static void buildheap(int array, int length, bool large)
/** 初次建堆時間複雜度o(n)
* 調整一次的時間為o(logn),一共調整n次
* 時間複雜度為o(nlogn)
* 空間複雜度o(1)
*/static void heapsort(int array, int length, bool increase) else
buildheap(array, length, large);
print(array, length);
//將極值逐漸放到隊尾,剩下元素重新調整
for (int i = length - 1; i > 0; i--)
}4、直接插入排序
/** 直接插入排序
* 思路:由第二個元素開始,從前向後遍歷,如若當前元素比前乙個元素小,則將
* 當前元素設為哨兵元素,儲存當前元素,從當前位置向前掃瞄,尋找哨兵元素應該插入的位置,
* 前面的元素依次後移,找到直接插入。然後繼續上述過程
* 時間複雜度:o(n^2)
* 空間複雜度:o(1)
*/static void directinsertsort(int array, int length)
array[j + 1] = pivot;}}
}5、希爾排序
/** shell排序(縮小增量排序)
* 思路:以一定間隔對陣列進行分組,在組上進行直接插入排序,使之有序,之後縮小間隔,
* 重複上述過程
* 時間複雜度:o(n^1.5)
* 空間複雜度:o(1)
*/static void shellsort(int array, int length)
array[j + gap] = x;}}
print(array, length);
gap /= 2;}}
6、氣泡排序
/** 氣泡排序
* 思路:每次內迴圈使相鄰元素有序,單次迴圈後最大值沉底(公升序時)
* 之後縮短內迴圈範圍,繼續上述操作,但是 有個問題,太冗雜
* 時間複雜度:o(n^2)
* 空間複雜度:o(1)
*/static void bubblesort(int array, int length)
}print(array, length);}}
資料結構排序演算法總結
常用的演算法有插入排序 氣泡排序 選擇排序 快速排序 歸併排序 希爾排序 堆排序 計數排序和基數排序。下面對著九種常見排序方法進行總結 排序方法 時間複雜度 空間複雜度 個人評價 插入排序 o n 2 o 1 選擇排序 氣泡排序 希爾排序 o n log n 快速排序 o log n 歸併排序 o ...
資料結構 排序演算法總結
def bubblesort array flag false length len array for i in range length for j in range length i 1 if array j array j 1 temp array j array j array j 1 a...
資料結構 排序演算法總結
1.排序 所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減的排列起來的操作。2.穩定性 假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,r i r j 且r i 在r j 之前,而在排序後的序列中,r i 仍在r ...