快速排序是一种分治算法。它采用递归的方式,将一个数组分为两个子数组,然后对这两个子数组分别进行排序。
具体实现
public static void kuaiSort(int[] arr,int low,int high) {int temp,i,j,t;if(low>high) {return;}i=low;j=high;temp=arr[low];while(i<j) {while(temp<=arr[j]&&i<j) {j--;}while(temp>=arr[i]&&i<j) {i++;}if(i<j) {t = arr[j];arr[j]=arr[i];arr[i]=t;}}arr[low]=arr[i];arr[i]=temp;kuaiSort(arr,low,j-1);kuaiSort(arr,j+1,high);}
函数定义public static void kuaiSort(int[] arr,int low,int high)
定义了一个名为kuaiSort
的静态方法,它接受一个整型数组arr
和两个整型参数low
和high
,分别代表要排序的数组的起始和结束索引。
终止条件if(low > high)
如果low
索引大于high
索引,说明当前子数组只有一个元素或者已经排序完成,直接返回。
初始化
i=low; j=high; temp=arr[low];
初始化两个指针i
和j
分别指向子数组的起始和结束位置,temp
用于存储基准值,这里选择的是子数组的第一个元
分区操作
while(i < j)
:只要i
和j
没有相遇,就继续分区操作。
while(temp <= arr[j] && i < j)
:从右向左找第一个小于基准值的元素。
while(temp >= arr[i] && i < j)
:从左向右找第一个大于等于基准值的元素。
if(i < j)
:如果i
和j
还没有相遇,交换这两个元素。
arr[low] = arr[i]; arr[i] = temp;
:将基准值放到正确的位置。
递归排序
kuaiSort(arr, low, j - 1);
对基准值左边的子数组进行快速排序。
kuaiSort(arr, j + 1, high);
对基准值右边的子数组进行快速排序。