//基本思想:選擇排序(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中的陣列遞迴劃分,直到...