一、原理
首先随机选取数组中的一个数,再遍历数组,将大于该数的元素放在其右边,小于该数的放在其左边。
二、算法过程
- 首先选取初始值t;
- 分别从左往右和从右往左进行遍历数组,左边索引初始值记为l,右边索引初始值记为r;
- 先从右往左遍历,当遍历的值大于t时,r-1,否则将r位置的值赋给l位置的值,同时改变遍历的方向;
- 不断重复2和3,直到l>=r停止。
三、代码实现
Java版`
import java.util.*;
public class Main{
public void main(String[] args){
int[] testArr = new int[]{1,12,23,15,32,20,60,45,58};
int l = 0;
int r = testArr.length-1;
quickSort(testArr,l,r);
for(int i=0;i<testArr.length;i++){
System.out.println(testArr[i]);
}
}
public void quickSort(int[] arr,int l, int r){
if(l<r){
int i = getValue(arr,l,r);//获取基准值位置
quickSort(arr,l,i-1);
quickSort(arr,i+1,r);
}
}
public int getValue(int[] arr, int l,int r){
int tem = arr[l];
while(l<r){
while(l<r && arr[r]>=tem){ //从右往左遍历
r--;
}
arr[l] = arr[r];
while(l<r && arr[l]<=tem){ //从左往右遍历
l++;
}
arr[r] = arr[l];
}
arr[l] = tem;
return l; //返回基准值位置
}
}
Python版
def quickSort(arr,l,r):
if l<r:
index = getValue(arr,l,r)
quickSort(arr,l,index-1)
quickSort(arr,index+1,r)
def getValue(arr,l,r):
tem = arr[l]
while(l<r):
while(l<r and arr[r]>=tem):
r = r-1
arr[l] = arr[r]
while(l<r and arr[l]<=tem):
l = l+1
arr[r] = arr[l]
arr[l] = tem
return l
if __name__ == '__main__':
arr = [1,12,23,15,32,20,60,45,58]
l = 0
r = len(arr)-1
quickSort(arr,l,r)
print(arr)