Java中常見的陣列排序演算法(包括冒泡,選擇,插入,快速排序)
阿新 • • 發佈:2019-01-28
1 public static void bubbleSort(int[] arr) { 2 3 for(int x=0; x<arr.length-1; x++) { 4 5 for(int y=0; y<arr.length-x-1; y++) { 6 7 if(arr[y]>arr[y+1]){ 8 9 int temp = arr[y]; 10 11 arr[y] = arr[y+1]; 1213 arr[y+1] = temp; 14 15 } 16 17 } 18 19 } 20 21 }
(2)、
1 public static void sort(int[] a) { 2 int temp = 0; 3 for (int i = a.length - 1; i > 0; --i){ 4 for (int j = 0; j < i; ++j){ 5 if (a[j + 1] < a[j]){6 temp = a[j]; 7 a[j] = a[j + 1]; 8 a[j + 1] = temp; 9 } 10 } 11 } 12 }
說明:氣泡排序是兩兩之間進行對比, 如:4.2.5.1.7 :第一次內迴圈、4和2比-->2,4 、4和5比-->4,5、5和1比-->5,1、5和7比-->5,7。
這樣最大的一個數就到了陣列的最後,第二次進行比對的時候只要比陣列長度-2次,就是<arr.length-1,即可得到次大的數,放在倒數第二的位置,如此反覆得到排序後的陣列。
3、插入排序:
public static void insertSort(int[] a) { for (int i = 1; i < a.length; i++) { for (int j = i; j > 0; j--) { if (a[j] < a[j - 1]) { int temp = a[j - 1]; a[j - 1] = a[j]; a[j] = temp; }else break; } } }
說明:插入排序和打牌一樣,拿到一個數和前面已有的數進行對比,比前面的數小就放到前面,舉例:4,2,5,1,7 :
第一次內迴圈、拿到數a[1]=2,和a[0]=4進行對比,2小,換位置;
第二次內迴圈、拿到數5,和4比,位置不變,if判斷為false,則break,跳出內迴圈,進行下一次;
第三次內迴圈、拿到數1,和5比,交換位置,1在和4比,交換位置,最後和2比,再次交換位置,得到結果,1,2,4,5,7;
...
4、直接選擇排序:
private static void xuanZePaiXu() {
int[] nums = new int[]{4,13,-1,2,0,5,30};
for (int i = 0; i < nums.length; i++) {
int tem = i;
for (int j = i; j < nums.length; j++) {
if (nums[j]<nums[tem]) {
tem = j;
}
}
int tem2 = nums[i];
nums[i] = nums[tem];
nums[tem] = tem2;
}
System.out.println(Arrays.toString(nums)); //迴圈遍歷陣列的新技巧
}