基础-快速排序(基本)
生活随笔
收集整理的這篇文章主要介紹了
基础-快速排序(基本)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
簡單的快排就是定義一個基準數和一左一右兩個“哨兵”,右側哨兵找比不大于基準數的值,左側找不小于基準的數,找到后交換兩個哨兵對應值的位置,然后繼續向左,向右尋找符合條件的數,知道左、右哨兵相遇后,將基準值和左哨兵值交換即可,此時,交換后的基準值左側都是小于它的值,右側都是大于它的值,然后以此方式分別處理左側數據和右側數據
?
package com.nxz.blog.otherTest;public class Test {public static void main(String[] args) {Test t = new Test();int[] ints = {2, 1, 4, 5, 6, 3, 8, 1, 0, 22, 33, 12, 1, 2};t.quickSort(ints, 0, ints.length - 1);for (int i : ints) {System.out.print(i + " ");}}/*** 基本的快排,就最左側數設置為基準數,設置l,r索引,分別代表左側索引值,和右側索引值,r遞減從右側開始找比基準小的數,l遞增從左側開始找比基準大的數,* 然后將兩個數調換位置,循環多次知道l==r時,終止循環,最終將基準數和l值調換位置,* 然后遞歸調用quickSort(left,i-1),quickSort(i+1,right)** @param arr*/public void quickSort(int[] arr, int left, int right) {//遞歸終止條件if (left > right) {return;}int base = arr[left];int l = left;int r = right;//l=r時就不用再次循環比較了 一趟代表只調換了兩個值,以一個值為基準時,會多次調換值,因此需要循環,直到l==r時,代表該基準值左右側已經調換完畢,最后//再將基準值和l值調換即可(也就是講基準值歸位,左側為小于基準的數,右側為大于基準的數)while (l != r) {//從右側找小于基準的數while (l < r && arr[r] >= base) {r--;}//從左側找大于基準的數while (l < r && arr[l] <= base) {l++;}if (l < r) {swapInt(arr, l, r);}}//基準和l調換swapInt(arr, left, l);//遞歸左側和右側數組 (采用分治的思想,兩個遞歸方法調用完畢后,就認為左右兩側已經排好)quickSort(arr, left, l - 1);quickSort(arr, l + 1, right);}/*** 交換數組中的兩個數** @param arr* @param left* @param right*/private void swapInt(int[] arr, int left, int right) {int temp = arr[left];arr[left] = arr[right];arr[right] = temp;} }?
總結
以上是生活随笔為你收集整理的基础-快速排序(基本)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: leetcode-2-两数相加
- 下一篇: 基础-冒泡排序