如题:利用Java语言实现快速排序算法
分析:
1、快速排序算法:先取一个标准数,然后从两端开始和这个标准数比较大小,比标准数大的放右边,比标准数小的放左边。
2、每比较一次后,两端相应的下标分别向中间移动,左边的向右移动(下标 +1),右边的向左移动(下标 -1)。
3、当左右两个下标重合时,再将标准数赋给这个重合的位置。
4、第一轮结束后,会出现左右两块,左边的都小于等于标准数,右边的都大于等于标准数。
5、将左右两块分别看成一个新的数组,进行递归。
6、递归截至的条件为:左边的位置不小于右边的位置。
具体代码如下:
import java.util.Arrays;
public class QuickSort {
public static void main(String[] args) {
int[] arr = new int[]{5,3,7,3,8,2,7,1,9,3,4,2,9,8,6,9,5,0,5};
System.out.println(Arrays.toString(arr));
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
private static void quickSort(int[] arr, int start, int end) {
if(start < end){
// 确定一个标准数,用来进行比对
int stard = arr[start];
// 记录一下排序的下标,最高位和最低位
int high = end;
int low = start;
// 利用循环找出比标准数大的数和比标准数小的数
while(low < high){
// 当右边(最高位)的数字比标准数大时
while(low < high && arr[high] >= stard){
high--;
}
// 将右边的数字的值赋给左边的数字
arr[low] = arr[high];
// 然后判断左边的数字和标准数的大小
while(low < high && arr[low] <= stard){
low++;
}
arr[high] = arr[low];
}
// 当高位和低位重合时,即两者指向同一个元素,再将标准数赋给他们(高位或者低位都行)
arr[high] = stard;
// 处理左边所有小于等于标准数的数字
quickSort(arr, start, low);
// 处理右边所有比标准数大的数字
quickSort(arr, low + 1, end);
}
}
}
代码实现结果如下:
[5, 3, 7, 3, 8, 2, 7, 1, 9, 3, 4, 2, 9, 8, 6, 9, 5, 0, 5]
[0, 1, 2, 2, 3, 3, 3, 4, 5, 5, 5, 6, 7, 7, 8, 8, 9, 9, 9]
人生若只如初见,何事秋风悲画扇。
等闲变却故人心,却道故人心易变。
-----------纳兰性德
小白寄语:学如逆水行舟,不进则退。