選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法。冒泡法:這是最原始,也是眾所周知的最慢的演算法了。他的名字的由來因為它的工作看來象是冒泡:複雜度為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...