日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基础-快速排序(基本)

發布時間:2024/9/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基础-快速排序(基本) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

簡單的快排就是定義一個基準數和一左一右兩個“哨兵”,右側哨兵找比不大于基準數的值,左側找不小于基準的數,找到后交換兩個哨兵對應值的位置,然后繼續向左,向右尋找符合條件的數,知道左、右哨兵相遇后,將基準值和左哨兵值交換即可,此時,交換后的基準值左側都是小于它的值,右側都是大于它的值,然后以此方式分別處理左側數據和右側數據

?

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;} }

?

總結

以上是生活随笔為你收集整理的基础-快速排序(基本)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。