快速排序思想:
// 以数组第一个元素作为基准数
// 分别从首尾遍历元素,从左侧找到比基准数小的第一个元素,从右侧找到第一个比基准数大的元素
// 在确定条件下找到后,此时i=j,将基准数与次数替换
// 以i=j为分界点,将数组分为左右两个部分,此时左侧数组元素小于 arr[i],右侧数组元素大于arr[j]
// 分别对左右两个数组继续执行上述操作,直到遇到递归结束条件
代码实现:
public class Application {
public static void main(String[] args) {
int[] arr = {10,7,2,4,7,62,3,4,2,1,8,9,19};
quickSort(arr,0,arr.length-1);
for(int i = 0;i<arr.length;i++){
System.out.println(arr[i]);
}
}
// 所有的操作都在一个数组上arr进行操作
public static void quickSort(int[] arr,int low,int high){
/*递归结束条件*/
if(low>high){
return;
}
/*递归体*/
int i=low,j=high,tag=low;
// 以数组第一个元素作为基准数
int temp = arr[low];
// 分别从首位遍历元素,从左侧找到比基准数小的第一个元素,从右侧找到第一个比基准数大的元素
while (i<j){
// 找到右边第一个小于基准数的数(小于是升序,大于是降序,取决你需求)
while(temp<=arr[j]&&i<j){
j--;
}
// 找到左边第一个小于基准数的数
while (temp>=arr[i]&&i<j){
i++;
}
// 找到之后将两个数进行替换;
if(i<j){
// 替换这两个数
int t = arr[j];
arr[j] = arr[i];
arr[i] = t;
}
}
// 此时i=j
// 在确定条件下找到后,此时i=j,将基准数与次数替换
arr[tag] = arr[i];
arr[i] = temp;
// 以i=j为分界点,将数组分为左右两个部分,此时左侧数组元素小于 arr[i],右侧数组元素大于arr[j]
// 分别对左右两个数组继续执行上述操作,直到遇到递归结束条件
quickSort(arr,low,i-1); // 左侧
quickSort(arr,i+1,high); // 右侧
}
}