Java实现快速排序 Quick Sort
生活随笔
收集整理的這篇文章主要介紹了
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)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java实现插入排序及其优化 Shell
- 下一篇: Java实现归并排序 Merge Sor