举例:要排序的数组 int[] arr={7,9,8,4,5,1,6,3,2,0};
从小到大排列:
/*
快速排序
*/
public class QuickSort {
private static void QuickSort(int[] arr,int left,int right)
{
if(left<right)//保证递归时至少有2个元素
{
int pivot=arr[left];//初始化保存基准
int i=left,j;//初始化i,j
for(j=left+1;j<=right;j++){
if(arr[j]<pivot)//如果此处元素小于基准,则把此元素和i+1处元素交换,并将i加1,如大于或等于基准则继续循环
{
int temp=arr[j];
arr[j]=arr[i+1];
arr[i+1]=temp;
i++;
}
}
arr[left]=arr[i];//交换i处元素和基准
arr[i]=pivot; //把基准值放到合适的位置
QuickSort(arr, left, i-1);//递归调用,分治思想,对左边的子数组进行快速排序
QuickSort(arr, i+1, right);//对右边的子数组进行快速排序
}
}
public static void main(String[] args)
{
int[] arr={7,9,8,4,5,1,6,3,2,0};
QuickSort(arr, 0, arr.length-1);
for(int b=0;b<arr.length;b++){//输出
System.out.println(arr[b]);
}
}
}
运行结果:
0
1
2
3
4
5
6
7
8
9
python版
def partition(arr, low, high):
i = (low - 1) # 最小元素索引
pivot = arr[high]
for j in range(low, high):
# 当前元素小于或等于 pivot
if arr[j] <= pivot:
i = i + 1
arr[i], arr[j] = arr[j], arr[i]
arr[i + 1], arr[high] = arr[high], arr[i + 1]
return (i + 1)
# arr[] --> 排序数组
# low --> 起始索引
# high --> 结束索引
# 快速排序函数
def quickSort(arr, low, high):
if low < high:
pi = partition(arr, low, high)
quickSort(arr, low, pi - 1)
quickSort(arr, pi + 1, high)
arr = [11, 5, 8, 9, 1, 7]
n = len(arr)
quickSort(arr, 0, n - 1)
print("排序后的数组:")
for i in range(n):
print("%d" % arr[i])