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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > java >内容正文

java

Java实现快速排序 Quick Sort

發(fā)布時(shí)間:2025/3/13 java 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java实现快速排序 Quick Sort 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文帶來八大排序算法之快速排序算法。

快速排序(QuickSort)是對冒泡排序的一種改進(jìn)。基本思想是:通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另一部分的所有數(shù)據(jù)都要小,然后再按此方法對這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過程通過遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。

因此快速排序有一個(gè)重要概念就是分區(qū)。如何分區(qū),則需要找一個(gè)中軸值(pivot),不同的版本的快速排序算法對中軸值pivot的選擇不同:

1.總是選擇第一個(gè)元素為中軸值pivot;

2.總是選擇最后一個(gè)元素為中軸值pivot;

3.隨機(jī)選擇一個(gè)元素為中軸值pivot;

4.選擇中間的元素為中軸值pivot(本文下面的代碼按此選擇)

代碼實(shí)現(xiàn):

import java.util.Arrays;public class QuickSort {public static void main(String[] args){int[] arr = {-9, 78, 0, 23, -567, 70};quickSort(arr, 0, arr.length-1);System.out.println(Arrays.toString(arr));}public static void quickSort(int[] arr, int left, int right){int l = left; //用于記錄左下標(biāo)int r = right; //用于記錄右下標(biāo)int pivot = arr[(left + right) / 2]; //中軸值int temp = 0; //臨時(shí)變量 作為交換時(shí)使用//while循環(huán)目的是讓 比pivot小的值放到其左邊//比pivot大的放到右邊while(l < r){//在pivot的左邊一直找,找到大于等于pivot值,才退出while(arr[l] < pivot){l = l + 1;}//在pivot的右邊一直找,找到小于等于pivot值,才退出while(arr[r] > pivot){r = r - 1;}//如果 l>= r 說明pivot的左右兩邊的值,已經(jīng)按照//左邊全部是小于等于pivot,右邊全部是大于等于pivot的值if(l >= r){break;}//交換temp = arr[l];arr[l] = arr[r];arr[r] = temp;//如果交換完之后,發(fā)現(xiàn)arr[l] == pivot , r-- 前移if(arr[l] == pivot){r = r - 1;}//如果交換完之后,發(fā)現(xiàn)arr[r] == pivot , l++ 后移if(arr[r] == pivot){l = l + 1;}}//如果 l == r , 必須 l++, r--, 否則出現(xiàn)棧溢出if(l == r){l = l + 1;r = r - 1;}//向左遞歸if(left < r){quickSort(arr, left, r);}//向右遞歸if(right > l){quickSort(arr, l, right);}} }

?

總結(jié)

以上是生活随笔為你收集整理的Java实现快速排序 Quick Sort的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。