日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

快速排序 java导包_排序算法-快速排序(Java实现)

發布時間:2024/8/23 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 快速排序 java导包_排序算法-快速排序(Java实现) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

上篇我們講了冒泡排序,這次我們講它的升級版快速排序,“快速”,一看就是個好算法~

快速排序(QuickSort)是啥?

我們先看下百度百科的介紹快速排序(Quicksort)是對冒泡排序的一種改進。

快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然后再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。

簡單點~

我們可以把快速排序看著三個步驟:

1.選擇基準值:在待排序列中,按照某種方式挑出一個元素,作為基準值。

2.分割操作:以該基準值在序列中的實際位置,把序列分成兩個子序列,一邊是比它大的值,另外一邊是比它小的值。

3.遞歸:對兩個子序列進行快排,直到序列為空或者只有一個元素。

過程演示

這是我畫的一張圖,結合這張圖再看下面的代碼可能會比較好理解一點,當然在看代碼的時候最后可以自己畫一張草圖,可以熟悉一下整個過程,加深理解!

代碼實現

public class QuickSort {

public static void main(String[] args) {

int[] arr = new int[] {9,4,6,8,3,10,4,6};

quickSort(arr,0,arr.length - 1);

System.out.println(Arrays.toString(arr));

}

public static void quickSort(int[] arr,int low,int high) {

int p,i,j,temp;

if(low >= high) {

return;

}

//p就是基準數,這里就是每個數組的第一個 p = arr[low];

i = low;

j = high;

while(i < j) {

//右邊當發現小于p的值時停止循環 while(arr[j] >= p && i < j) {

j--;

}

//這里一定是右邊開始,上下這兩個循環不能調換(下面有解析,可以先想想)

//左邊當發現大于p的值時停止循環 while(arr[i] <= p && i < j) {

i++;

}

temp = arr[j];

arr[j] = arr[i];

arr[i] = temp;

}

arr[low] = arr[i];//這里的arr[i]一定是停小于p的,經過i、j交換后i處的值一定是小于p的(j先走) arr[i] = p;

quickSort(arr,low,j-1); //對左邊快排 quickSort(arr,j+1,high); //對右邊快排

}

}

一些問題

1.什么是基準值:

其實就是在數組里面找一個數,一般選擇數組的第一個數作為基準值,當然這不一定是最佳的基準值,但這不妨礙我們做快速排序。本篇只講標配版的快排,所以就選第一位作為基準值,以后有機會再更新高配版的~

2.快排中為什么一定是右邊先開始循環?

從右邊先開始的前提是我們選擇序列中最左邊的元素最為基準值。

先從右邊開始可以保證i,j相等的時候,arr[i] = arr[j] 小于基準值p。這樣交換之后才能保證基準值左右兩邊分別小于和大于它的值。

我們圖片演示一下:

可以發現如果左邊先走的話將導致分組不成功,即左邊的元素并不是都小于基準值。

本篇完,如果有錯誤的地方歡迎大家指正,一起學習一起進步

我的公眾號:Java小部落

我的個人博客:http://www.fangjiaxian.cn

不定時發發筆記,找一起學習的伙伴,歡迎大家來搞~

創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

總結

以上是生活随笔為你收集整理的快速排序 java导包_排序算法-快速排序(Java实现)的全部內容,希望文章能夠幫你解決所遇到的問題。

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