首页 > 试题广场 >

快速排序

[编程题]快速排序
  • 热度指数:528 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
快速排序
快速排序又是一种分而治之思想在排序算法上的典型应用。
算法步骤
1、从数列中挑出一个元素,称为 “基准”(pivot)。
2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。
3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。
4、递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。


输入描述:
20,413,3,53,90,324


输出描述:
[3, 20, 53, 90, 324, 413]
示例1

输入

20,413,3,53,90,324

输出

[3, 20, 53, 90, 324, 413]

备注:
特别提醒:注意输入输出,严格按照示例。
import java.io.BufferedInputStream;
import java.util.Scanner;

public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while (sc.hasNext()){
String str=sc.nextLine();
String[] ret=str.split(",");
int[] arr=new int[ret.length];

for(int i = 0;i < ret.length;i++){
arr[i] = Integer.parseInt(ret[i]);
}
//
quickSort(arr,0, ret.length-1);

//
System.out.print("["+arr[0]);
for (int i = 1; i < arr.length; i++) {
System.out.print(", "+arr[i]);
}
System.out.print("]");
}
}

//分而治之的思想
public static void quickSort(int[]arr,int left,int right){
if(left>=right) return;
int x= arr[(right+left)/2],i=left-1,j=right+1;
while (i<j){
do {
i++;
}while (arr[i]<x);
do {
j--;
}while (arr[j]>x);
if(i<j) {
int t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
quickSort(arr,left,j);
quickSort(arr,j+1,right);
}
}
发表于 2023-07-04 15:33:13 回复(0)