Python
# -*- coding:utf-8 -*-
def quickSort1(arr):
if len(arr)<2:
return arr
pivot = arr[0]
left,right = [],[]
arr.remove(pivot)
for i in arr:
if i>pivot:
right.append(i)
else:
left.append(i)
return quickSort1(left) + [pivot] + quickSort1(right)
def quickSort2(arr,left,right):
if(left>=right):
return
pivot = arr[left]
i = left
j = right
while(i<j):
while(i<j and arr[j] >= pivot):
j-=1
arr[i]=arr[j]
while(i<j and arr[i] <= pivot):
i+=1
arr[j]=arr[i]
arr[i]=pivot
quickSort2(arr,left,i-1)
quickSort2(arr,i+1,right)
if __name__ == "__main__":
arr = [1,2,4,6,43,2,3,7,8,5,2]
print "1 排序前:",arr
print "1 排序后:",quickSort1(arr)
arr2 = [6,43,2,3,7,8,5,9]
print "2 排序前:",arr2
quickSort2(arr2,0,10)
print "2 排序后:",arr2
Java
static void quickSort(int[] arr, int left, int right) {
if (left < right) {
int index = getIndex(arr, left, right);
quickSort(arr, left, index - 1);
quickSort(arr, index + 1, right);
}
}
static int getIndex(int[] arr, int left, int right) {
int pivot = arr[left]; // 选取第一个值为pivot,不是left[0]
int i = left; // 初始化指针为范围边界
int j = right;
while (i < j) {
// 右边开始找
while (i < j && arr[j] >= pivot) {
j--;
}
arr[i] = arr[j];
while (i < j && arr[i] <= pivot) {
i++;
}
arr[j] = arr[i];
}
// while 的退出条件为 i==j,所以pivot给arr[i]或者arr[j]都可以
// pivot 归位
arr[i] = pivot;
return i;
}
public static void main(String[] args) {
int[] arr = {3, 5, 12, 56, 2, 3, 4, 9, 10};
System.out.println(Arrays.toString(arr));
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}