資料結構和演算法系列(3)排序演算法

2021-09-02 22:11:21 字數 1942 閱讀 4295

使用場景

o(n)= n*(n-1)/2 如果n比較小的話它的時間複雜度就會降級

資料量比較小,常見於小遊戲中10個左右資料的排序場景

具體實現

/**

* 氣泡排序演算法

* * 適用於資料量比較小的場景

* * @param array

*/public

static

void

bubblesort

(int

array)}if

(flag)

}}

使用場景

選擇排序(selection sort)是一種簡單直觀的排序演算法。它的工作原理是每一次從待排序的資料元素中選出最小(或最大)的乙個元素,存放在序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到全部待排序的資料元素排完。 選擇排序是不穩定的排序方法。

具體實現

/**

* 選擇排序演算法

* *

* @param array

*/public

static

void

selectsort

(int

array)}if

(index != i)

}}

使用場景

資料量大並且是線性結構,有一點不好就是出現大量重複資料時候容易效能不好

前序遍歷

具體實現

//這個寫起來就有點麻煩了,jdk預設使用就是快速排序演算法,這裡給出同樣功能的實現

/** * 快速排序

* * @param array

* @param begin

* @param end

*/public

static

void

quicksort

(int

array,

int begin,

int end)

} high = low;

}else

} low = high;}}

// 第一次迴圈結束,將左右兩邊分隔開,左邊的全部小於右邊的

array[low]

= x;

// 比較左邊的資料

quicksort

(array, begin, low -1)

;// 比較右邊的資料

quicksort

(array, low +

1, end)

;}

使用場景

後序遍歷,使用空間比較大

具體實現

public

static

void

mergesort

(int array,

int left,

int right)

else

}// 0 4 7

// 1 2 5 9 === 3 4 10 11

public

static

void

merge

(int

array,

int left,

int mid,

int right)

for(

int i = mid; i <= right; i++

)// 合併

int i =0;

int j =0;

int k = left;

while

(i < leftsize && j < rightsize)

else

}while

(i < leftsize)

while

(j < rightsize)

}

資料結構與演算法系列10 排序演算法 歸併 快排

思想 歸併排序的核心思想還是蠻簡單的。如果要排序乙個陣列,我們先把陣列從中間分成前後兩部分,然後對前後兩部分分別排序,再將排好序的兩部分合併在一起,這樣整個陣列就都有序了。歸併排序 def merge sort a n len a merge sort between a,0,n 1 def mer...

資料結構3 排序演算法

氣泡排序 演算法描述 排序問題是基本演算法,主要有冒泡演算法 插入排序以及選擇排序演算法。冒泡演算法是對整個列進行多次遍歷迴圈,直至將所有的數都比較一遍,每次迴圈都能產生乙個最大數放置於後面,這樣需要兩層迴圈 外層控制次數,內層控制單次冒泡,內層針對的是相鄰裡兩個進行比較的迴圈。using syst...

資料結構系列 一 排序演算法

1.2 插入排序 1.3 選擇排序 1.4 歸併排序 1.5 堆排序 1.6 快速排序 基於資料狀況的排序演算法 1.7桶排序 1.8 小結 穩定排序 相對次序並沒有改變 void bubblesortv1 int a,int n 實現 增加乙個sorted標誌,對於有序陣列則不再進行比較判斷。複雜...