什么是快速排序?
从待排序的数据序列中任取一个数据(如第一个数据)为分界值,所有比它小的数据元素一律放到左边,所有比它大的数据元素一律放到右边。经这一趟下来,该序列形成两个左右子序列,左边序列中数据元素的值都比分界值小,右边序列中的数据元素的值都比分界值大。接下来对左、右子序列进行递归
package com.stud.test.stu;
public class QuickSort {
public int getMiddle(int []arr,int low, int high) {
int temp = arr[low];
while(low < high) {
while(low < high && arr[high] >= temp) {
high--;
}
arr[low] = arr[high];
while(low < high && arr[low] <= temp) {
low++;
}
arr[high] = arr[low];
}
arr[low] = temp;
return low;
}
public void quick(int []arr,int low,int high) {
if(low < high) {
int mid = getMiddle(arr, low, high);
quick(arr, low, mid -1);
quick(arr, mid + 1, high);
}
}
public static void main(String[]args) {
int [] arr = {49,38,65,26,76,13,27,52};
QuickSort quick = new QuickSort();
quick.quick(arr, 0, arr.length - 1);
for(int i = 0;i < arr.length;i++) {
System.out.print(arr[i] + "\t");
}
}
}
控制台输出结果
13 26 27 38 49 52 65 76
作业:
从键盘输入10个学生的成绩,使用快速排序将它们降序打印到控制台
package com.stud.test.stu;
import java.util.Scanner;
/**
* 从键盘输入10个学生的成绩,使用快速排序将它们降序打印到控制台
*/
public class Work {
public void grade() {
Scanner input = new Scanner(System.in);
System.out.println("请输入要录入成绩的学生个数:");
int num = input.nextInt();
int []arr = new int[num];
for(int i = 0;i < num;i++) {
System.out.println("请输入第" + (i+1) + "位学生的成绩:");
arr[i] = input.nextInt();
}
quick(arr, 0, arr.length-1);
System.out.println("降序输出成绩为:");
for(int i = 0;i < arr.length ;i++) {
System.out.print(arr[i] + "\t");
}
}
public void quick(int[] arr,int low,int high) {
if(low < high) {
int mid = getMiddle(arr, low, high);
quick(arr, low, mid - 1);
quick(arr, mid + 1, high);
}
}
public int getMiddle(int[] arr,int low,int high) {
int temp = arr[low];
while(low < high) {
while(low < high && arr[high] <= temp) {
high--;
}
arr[low] = arr[high];
while(low < high && arr[low] >= temp) {
low++;
}
arr[high] = arr[low];
}
arr[low] = temp;
return low;
}
public static void main(String[]args) {
Work quick = new Work();
quick.grade();
}
}
控制台输出结果:
请输入要录入成绩的学生个数:
10
请输入第1位学生的成绩:
100
请输入第2位学生的成绩:
80
请输入第3位学生的成绩:
90
请输入第4位学生的成绩:
78
请输入第5位学生的成绩:
99
请输入第6位学生的成绩:
100
请输入第7位学生的成绩:
78
请输入第8位学生的成绩:
69
请输入第9位学生的成绩:
99
请输入第10位学生的成绩:
89
降序输出成绩为:
100 100 99 99 90 89 80 78 78 69