快速排序(Java语言实现)——从控制台输入数据,排序后输出

£神魔★判官ぃ 2022-05-28 04:41 388阅读 0赞

快速排序

排序思想

通过对数据元素集合Rn 进行一趟排序划分出独立的两个部分。其中一个部分的关键字比另一部分的关键字小。然后再分别对两个部分的关键字进行一趟排序,直到独立的元素只有一个,此时整个元素集合有序。
所有比R[low]小的放前面,所有比R[low] 大的放后面,然后以R[low]为分界,对R[low … high] 划分为两个子集和,再做划分。直到low >= high 。

实现的代码

  1. 第一个文件(Main.java)

    import java.util.ArrayList;
    import java.util.Scanner;

  1. public class Main {
  2. public static void main(String[] args) {
  3. Scanner sc = new Scanner(System.in);
  4. System.out.println("please input the data,press \"CTRL+Z\" to end input");
  5. ArrayList<Integer> a = new ArrayList<Integer>();
  6. while(sc.hasNextInt()){
  7. int temp;
  8. temp= sc.nextInt();
  9. a.add(temp);
  10. }
  11. new Functions().showAll(a);
  12. new Functions().quickSort(a,0,a.size()-1);
  13. new Functions().showAll(a);
  14. }
  15. }
  1. 第二个文件(Functions.java)

    package com.dlut.quickSort;

    import java.util.ArrayList;
    import java.util.Iterator;

    public class Functions {

    1. void quickSort(ArrayList<Integer> a,int left,int right){
    2. int tleft;
    3. int tright;
    4. int temp;
    5. tleft= left;
    6. tright = right;
    7. int key = a.get(tleft);
    8. while(tleft<tright){
    9. while(tleft<tright&&a.get(tright)>key){
    10. tright--;
    11. }
    12. a.set(tleft, a.get(tright));
    13. while(tleft<tright&&a.get(tleft)<key){
    14. tleft++;
    15. }
    16. a.set(tright,a.get(tleft));
    17. if(tleft==tright){
    18. a.set(tleft, key);
    19. }
    20. if(left<tright){
    21. quickSort(a,left,tleft-1);
    22. }
    23. if(tleft<right){
    24. quickSort(a,tright+1,right);
    25. }
    26. }
  1. }
  2. public void showAll(ArrayList<Integer> a){
  3. System.out.println("please show the data");
  4. Iterator<Integer> it = a.iterator();
  5. while(it.hasNext()){
  6. System.out.print(it.next()+"\t");
  7. }
  8. System.out.println();
  9. }
  10. }

运行结果

这里写图片描述

和其他的排序方式比较

这里写图片描述

总结

快速排序:不稳定
时间复杂度:nlogn

发表评论

表情:
评论列表 (有 0 条评论,388人围观)

还没有评论,来说两句吧...

相关阅读