常見排序方法

2022-03-26 23:11:41 字數 2551 閱讀 9582

比較常用的排序方法(公升序):

氣泡排序:最常用的排序方法。大體思路就是每次選出乙個最大值,第二次選出次大值,基本上就是兩個for迴圈。

雞尾酒排序:氣泡排序方法的變種,雞尾酒排序,待排序陣列首先從0->n-1找出最大值,然後n-2->0找出最小值,然後再從1->n-2找次大值……依次類推……乙個while迴圈,裡面套兩個for迴圈即可。

奇偶排序:也是氣泡排序的變種。乙個while迴圈,裡面兩個for迴圈,但是乙個for迴圈從0開始,乙個從1開始,每次加2,比較相鄰兩個數值大小。

快速排序:是分之思想的一種體現。對於乙個待排序佇列,首先選擇乙個基準,掃瞄資料,大於這個基準資料的元素放在右側,小於的放在左側,然後左側和右側的資料又是待排序佇列,再分別選擇基準……遞迴下去,知道全部都是有序的。

插入排序:是一種比較直觀的排序方法,從待排序佇列中構建有序佇列,把剩餘的待排序資料插入到有序佇列中。

希爾排序:分步長排序法,對相隔步長的資料分別進行排序,然後減小步長,直至步長為1,主要可以減少資料的移動次數。

選擇排序:選擇乙個最大元素放入隊尾,然後從剩餘的元素中選擇最大的放入隊尾的前一位置,直到待排序陣列中只有乙個元素為止。

堆排序演算法:選擇排序的一種,不停的構建大(小)頂堆,然後取出頂,得到有序序列。

歸併排序:也是典型的分治法思想的應用,是把兩個有序的序列合併成乙個有序序列。其中這兩個有序序列分別是有兩個有序序列合併而成。

基數排序:是一種比較型整數排序演算法,把待比較的數值按照位數切割成不同的數值,從權值小的位開始比較大小,每個位數分別比較。

分類

排序方法

穩定性

平均時間複雜度

空間複雜度

交換排序

氣泡排序

穩定o(n2)

o(1)

雞尾酒排序

穩定o(n2)

o(1)

奇偶排序

穩定o(n2)

o(1)

快速排序

不穩定o(nlogn)

o(logn)~o(n)

插入排序

直接插入排序

穩定o(n2)

o(1)

希爾排序

不穩定o(n1.25)

o(1)

選擇排序

選擇排序

不穩定o(n2)

o(1)

堆排序不穩定

o(nlogn)

o(1)

歸併排序

歸併排序

穩定o(nlogn)

o(n)

分布排序

基數排序

穩定o(nd)d為位數

o(nd)

還有一種比較好用的排序方法是二叉樹排序法,是插入排序的一種,平均時間複雜度也不高,而且還能夠方便的動態查詢。在某些動態查詢應用中可以很方便的應用。關於二叉樹排序方法可以參考如下鏈結,我在後續的文章中也會具體寫二叉排序樹的相關操作。

常見排序方法:

#ifndef sort_h_included

#define sort_h_included

/**定義了各種排序方法 增序*

*/void swap(int *a,int *b)

///氣泡排序

void bubbling_sort(int * array,int

len)}}

}///

快速排序

int partion(int *arr, int left, int

right)

}swap(&arr[right],&arr[pos]);

return

pos;

}//遞迴實現

void quicksort1(int *arr, int left, int

right)

}//非遞迴實現

void quicksort2(int *arr,int left,int right)

if(pos+1    if(pos-1>left)

if(pos+1}
///

堆排序void heapfiy(int arr, int current, int

heap_size)

if(rarr[largest])

if(largest!=current)

}void build_heap(int *arr,int

len)

}void heapsort(int *arr,int

len)}//

歸併排序

void merge_min(int* arr1,int len1,int* arr2, int

len2)

else

} while(iwhile(jfor(k=0;k)

free(tempspace);

}void merge_sort(int *arr,int

n)#endif

//sort_h_included

二叉查詢樹

常見排序方法

include include using namespace std const int maxsize 100 void myswap int a,int b void bubblesort int a,int len void print int a,int len 氣泡排序 時間複雜度 最壞...

常見排序方法

1.氣泡排序 思想 兩兩比較,把較大的移到後面,多次迴圈後最終把最大的放到最後,接著對前面的數繼續迴圈,直到正序。因為像氣泡一樣,所以稱作氣泡排序。include define n 100 intmain for i 0 i printf d a i return0 如果覺得用for迴圈太過繁雜,也...

常見排序方法整理

建立乙個用於運算元組的工具類,其中包含著常見的對陣列的操作函式如 排序,最值等 author jepson version v1.0 public class arraytool 對給定的整數陣列進行直接插入排序 param arr 接收乙個元素型別為int的整數陣列 public static v...