排序演算法實現分析

2021-07-12 06:52:54 字數 1695 閱讀 3273

選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法。

氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。

冒泡法:這是最原始,也是眾所周知的最慢的演算法了。他的名字的由來因為它的工作看來象是冒泡:複雜度為o(n*n)。當資料為正序,將不會有交換。複雜度為o(0)。

直接插入排序:o(

n2)

選擇排序:o(

n2)

快速排序:平均時間複雜度

nlog2(

n),所有內部排序方法中最高好的,大多數情況下總是最好的。

歸併排序:

nlog2(

n)

堆排序:

nlog2(

n)

希爾排序:演算法的複雜度為n的1.2次冪

#include

#include

#include

using

namespace

std;

void insertion_sort(int a, int n)//insertion sort

a [j] = temp;

}}// bubble sort 的改進版,一旦沒發生交換則排序結束, flag去掉則為原始版本。

void bubble_sort(int a, int n)

}}void selection_sort(int a, int n)//selection sort

}int partition(int a, int start, int end) //partition 演算法

void quick_sort(int a, int left, int right) //quick sort

//歸併排序的merge相當於兩個已排序鍊錶或者陣列的合併

void merge( int arr, int temp_arr, int start_index, int mid_index , int end_index)

void merge_sort(int a, int temp_a, int start_index, int end_index )

void heap_adjust(int a, int i, int len)//heap sort

else

break;

}}void heap_sort(int a, int len)

}//shell sort,中間兩個迴圈的思想和插入排序一樣,每次相當於對 incur個子陣列進行排序

void shell_sort(int a, int len)

}}int main() ;

int len = (int) sizeof(arr) / sizeof(*arr);

cout

<< len << endl;

int *temp_a = new

int [len];

merge_sort(arr ,temp_a, 0,len -1);

deletetemp_a;

for (int i = 0; i < len; i++)

cout

<< arr[ i] << ' ';

cout

<< endl ;

return

0;}

排序演算法 堆排序演算法實現及分析

堆排序 heap sort 就來利用堆 假設利用大頂堆 進行排序的方法。它的基本思想是,將待排序的序列構成乙個大頂堆。此時,整個序列的最大值就是堆頂的根結點。將它移走 其實就是將其與堆陣列的末尾元素交換,此時末尾元素就是最大值 然後將剩餘的n 1個序列重新構造成乙個堆,這樣就會得到n個元素中的次小值...

幾種排序演算法實現分析

合併排序 void merge int a,int left,int mid,int right,int b else void copy int a,int b,int left,int right void mergesort int a,int left,int right,int len i...

排序演算法 氣泡排序演算法分析與實現 Python

december 22,2015 1 12 pm 原理是臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,這樣一趟過去後,最大或最小的數字被交換到了最後一位,然後再從頭開始進行兩兩比較交換,直到倒數第二位時結束,其餘類似看例子。例子為從小到大排序,原始待排序陣列 6 2 4 1 5 9...