資料結構---查詢和排序
阿新 • • 發佈:2018-11-16
幾種常見的排序:冒泡,插入,選擇,快速,歸併排序
關係:排序是查詢的前提
程式碼
1.氣泡排序(BubbleSort)
public class BubbleSort { /** * * 氣泡排序 * 從第一個元素開始依次和後面的元素比較,並交換位置 * 從第二個元素開始依次和剩下的元素比較,並交換位置 * 如此往復 */ public static void main(String[] args) { Integer[] arr = { 4, 5, 9, 8, 1, 2, 6, 7, 3 }; for (int i = 0; i < arr.length; i++) { for (int j = i + 1; j < arr.length; j++) { if (arr[i] > arr[j]) { //每比較一次就就交換一次位置 int mid = arr[i]; arr[i] = arr[j]; arr[j] = mid; } } } } }
2 快速排序
public class FastSort { /** * 快速排序 * 先定義一個min代表當此迴圈的最小元素的下標 * 先比較得到陣列中最小的元素,然後與第一個元素交換位置 * 然後在剩下的陣列中找到最小的元素,與第二個元素交換位置 * 如此往復 */ public static void main(String[] args) { Integer[] arr = {4,5,9,8,1,2,6,7,3}; for(int i =0;i<arr.length;i++){ int min = i; //先不斷比較得到最小值的下標 for(int j=i+1;j<arr.length;j++){ if (arr[min]>arr[j]) min=j; } //本次迴圈比較完畢後再交換位置 int mid = arr[i]; arr[i]=arr[min]; arr[min] = mid; } } }
3 插入排序
public class InsertSort { /** * 插入排序 * 把待排序陣列看成2部分:有序部分和無序部分 * 有序部分從0開始向後排序,依次迴圈到最後一個元素 */ public static void main(String[] args) { Integer[] arr = { 4, 5, 9, 8, 1, 2, 6, 7, 3 ,0}; for (int i = 0; i < arr.length; i++) { //長度為i的陣列內,第i個依次和前面的比較並排序 for (int j = i; j > 0; j--) { if (arr[j] < arr[j - 1]) { int temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; } } } } }
4 .選擇排序
public class ChooseSort {
/**
* 選擇排序:
* 每次從未排序序列中選出最小元素
* 和前面已排序序列的最後一個交換位置
*/
public static void main(String[] args) {
Integer[] arr = { 8, 1, 3, 5, 2, 9, 0, 7, 4 };
for (int i = 0; i < arr.length-1; i++) {
int min = i;
//找到該次剩餘元素的最小值
for (int j = min + 1; j < arr.length; j++) {
if (arr[min] > arr[j]) {
min = j;
}
}
//與已排序的序列的最後一個值交換位置
int temp = arr[min];
arr[min] = arr[i];
arr[i] = temp;
}
System.out.println(11);
}
}