冒泡排序、快排实现
排序?qū)崿F(xiàn)
1.可調(diào)用Arrays.sort方法實(shí)現(xiàn)
public class Demo3 {public static void main(String[] args) {int []arr={3,5,2,1,4};Arrays.sort(arr);//可調(diào)用Arrays.toString方法打印數(shù)組System.out.println(Arrays.toString(arr));} }打印結(jié)果: ------------------------------------------------- [1, 2, 3, 4, 5]2.冒泡排序代碼實(shí)現(xiàn)【用于面試】
public class Demo3 {public static void main(String[] args) {int []arr={3,5,2,1,4};int[] arr1 = bubbleSort(arr);System.out.println(Arrays.toString(arr1));}public static int [] bubbleSort(int[] arr) {//i表示循環(huán)次數(shù)for (int i = 0; i < arr.length-1; i++) {//每循環(huán)一次則找到最大的值放在最右邊,則比較的元素需要-ifor (int j = 0; j < arr.length-1-i; j++) {//相鄰的元素比較,左邊大于右邊則交互位置if (arr[j] > arr[j+1]) {int temp =arr[j];arr[j]= arr[j+1];arr[j+1]=temp;}}}return arr;} }打印結(jié)果: ------------------------------------------------- [1, 2, 3, 4, 5]3.sort底層代碼快排實(shí)現(xiàn)
//快排 public class Demo4 {public static void main(String[] args) {int[] arr = {6, 1, 2, 7, 9, 3, 4, 5, 10, 8};//arr為目標(biāo)數(shù)組。left:排序的開始索引 right:排序的結(jié)束索引//范圍包括left和rightquiteSort(arr, 0, arr.length - 1);//增強(qiáng)for遍歷for (int i : arr) {System.out.print(i + " ");}System.out.println();}private static void quiteSort(int[] arr, int left, int right) {//定義遞歸出口if (left > right) {return;}//定義初始位置int left0 = left;//用于遞歸使用int right0 = right;//計(jì)算出基準(zhǔn)數(shù)int baseNumber = arr[left0];while (left != right) {//1.從右開始找比基準(zhǔn)數(shù)小的(不包含相等)while (arr[right] >= baseNumber && right > left) {right--;}//2.從左開始找比基數(shù)大的(不包含相等)while (arr[left] <= baseNumber && left < right) {left++;}//3.當(dāng)右邊有比基準(zhǔn)數(shù)小的數(shù)時停下//當(dāng)左邊有比基準(zhǔn)數(shù)大的數(shù)停下// 交換兩個值的位置int temp = arr[left];arr[left] = arr[right];arr[right] = temp;}//循環(huán)完成后,基準(zhǔn)數(shù)歸位//則比基準(zhǔn)數(shù)大的都在右邊,小的在左邊//把right位置的元素放在left0位置arr[left0] = arr[right];//基準(zhǔn)數(shù)放在right位置arr[right] = baseNumber;//6元素左邊的數(shù)組排序,left0為基準(zhǔn)數(shù)的最開始索引、//此處left0為0,right為6quiteSort(arr, left0, right - 1);//6元素右邊的數(shù)組排序quiteSort(arr, right + 1, right0);} }打印結(jié)果: ------------------------------------------------- 1 2 3 4 5 6 7 8 9 10注:為什么要從右邊開始?
【left在大于基準(zhǔn)數(shù)的地方停下,right在小于基準(zhǔn)數(shù)的地方停下,如果left先走,那么左邊一輪后指向的位置一定大于基準(zhǔn)數(shù),右邊再開始一輪的話,那么最終停下來的地方一定在left處,而left指向的位置比自己大,交換就一定會出錯】
總結(jié)
- 上一篇: 一生有意义歌词 一生有意义歌词是什么
- 下一篇: 明治维新的影响 明治维新的影响简述