選擇排序,快排,冒排

2022-02-21 09:08:10 字數 3152 閱讀 6121

//基本思想:選擇排序(selection-sort)是一種簡單直觀的排序演算法。

//它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,

//然後,再從剩餘未排序元素中繼續尋找最小(大)元素,

//然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢

在待排序資料中,選出最小的乙個數與第乙個位置的數交換;然後在剩下的數中選出最小的數與第二個數交換;依次類推,直至迴圈到只剩下兩個數進行比較為止。

[7, 6, 5, 3, 1, 9, 4]

------------------------

[1, 6, 5, 3, 7, 9, 4]

[1, 3, 5, 6, 7, 9, 4]

[1, 3, 4, 6, 7, 9, 5]

[1, 3, 4, 5, 7, 9, 6]

[1, 3, 4, 5, 6, 9, 7]

[1, 3, 4, 5, 6, 7, 9]

[1, 3, 4, 5, 6, 7, 9]

public static void main(string args) ;

system.out.println(arrays.tostring(arr));

system.out.println("------------------------");

for (int i = 0; i < arr.length; i++)

}int temp = arr[minindex];

arr[minindex] = arr[i];

arr[i] = temp;

system.out.println(arrays.tostring(arr));

}}

public class bubblesort 

}system.out.println(arrays.tostring(arr));

if (!flag) break;//沒有資料交換,陣列已經有序,退出排序}}

public static void main(string args) ;

system.out.println(arrays.tostring(arr));

bubblesort(arr, arr.length);

}

通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按此方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。

1.設定 low=0, high=n-1。

2.選擇乙個基準元素賦值給temp,即temp=a[low]。

3.從high開始向前搜尋,即由後開始向前搜尋(high--),找到第乙個小於temp的值,將a[high]和a[low]交換。

4.從low開始向前後搜尋,即由前開始向後搜尋(low++),找到第乙個大於temp的值,將a[high]和a[low]交換。

5.重複第3步和第4步,直到 lowhigh ,3,4步中,若沒找到符合條件的值,執行 high-- 或 low++ ,直到找到為止。進行交換時 low和high的位置不變。當lowhigh時迴圈結束。

基準點的選取:固定切分、隨機切分、三取樣切分。

快速排序是不穩定的

快速排序在序列元素很少時,效率比較低。因此,元素較少時,可選擇使用插入排序。

public class quicksort 

i=low;

j=high;

//temp就是基準位

temp = arr[low];

while (i=arr[i]&&i

分而治之(divide - conquer);每個遞迴過程涉及三個步驟

第一, 分解: 把待排序的 n 個元素的序列分解成兩個子串行, 每個子串行包括 n/2 個元素.

第二, 治理: 對每個子串行分別呼叫歸併排序mergesort, 進行遞迴操作

第三, 合併: 合併兩個排好序的子串行,生成排序結果.

[60, 7, 44, 27, 62, 8, 59, 19]

[60, 7, 44, 27, 62, 8, 59, 19]

[60, 7, 44, 27, 62, 8, 59, 19]

[7, 60, 44, 27, 62, 8, 59, 19]

[7, 60, 44, 27, 62, 8, 59, 19]

[7, 60, 44, 27, 62, 8, 59, 19]

[7, 60, 27, 44, 62, 8, 59, 19]

[7, 27, 44, 60, 62, 8, 59, 19]

[7, 27, 44, 60, 62, 8, 59, 19]

[7, 27, 44, 60, 62, 8, 59, 19]

[7, 27, 44, 60, 8, 62, 59, 19]

[7, 27, 44, 60, 8, 62, 59, 19]

[7, 27, 44, 60, 8, 62, 59, 19]

[7, 27, 44, 60, 8, 62, 19, 59]

[7, 27, 44, 60, 8, 19, 59, 62]

[7, 8, 19, 27, 44, 59, 60, 62]

process finished with exit code 0

public class mergesort 

return a;

}public static void merge(int a, int low, int mid, int high) else

}// 把左邊剩餘的數移入陣列

while(i<=mid)

// 把右邊邊剩餘的數移入陣列

while(j<=high)

// 把新陣列中的數覆蓋nums陣列

for(int x=0;x}

public static void main(string args) ;

system.out.println(arrays.tostring(arr));

mergesort(arr, 0,arr.length-1);

system.out.println(arrays.tostring(arr));

}}

排序 選擇 冒泡 快排

簡單介紹三種常見的排序方法 選擇 冒泡 快排。從大到小排列 選擇排序是在所有資料中先選擇第乙個資料作為最大值,依次和後面的每乙個資料比較,如果比最大值大,替換最大值並且記住索引,遍歷結束後,通過索引把最大值和第乙個資料替換。後面的資料依次執行一遍,就可以得到從大到小排列的資料了。如下 4 void ...

排序介紹(選擇 冒泡 快排 堆排序)

問題描述 排序問題 給出一組數字,要求按照數值的大小進行排序 例如 這組資料進行公升序的排列後的順序為 氣泡排序 是一種簡單的排序演算法,它實現的過程 不斷重複的走訪過要排列的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來,走訪數列的工作就是重複的進行,直到沒有再需要進行交換的的時候,就...

演算法 快速排序 經典快排 隨機快排

經典快排的思路是選取陣列的最後乙個數 x,按照問題一的思路把整個陣列劃分成小於等於 x 大於 x兩個部分,將 x 和 大於 x 部分陣列的第乙個元素交換位置。此時整個陣列劃分成小於等於 x x 大於 x三個部分,也就是這一次排序將 x 值排好位置。再分別對小於等於 x和大於 x中的陣列遞迴劃分,直到...