首页 > 试题广场 >

快速排序

[编程题]快速排序
  • 热度指数:9109 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
一个数组有 N 个元素,使用快速排序对其进行排序输出(本题还会人工阅卷,请使用快速排序算法进行排序)

输入描述:
输入为两行。 第一行一个整数n(1 ≤ n ≤ 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。


输出描述:
输出一行,即排序之后的数组,以空格分隔,行末无空格
示例1

输入

10 293 108 161 783 376 265 330 598 646 812

输出

108 161 265 293 330 376 598 646 783 812
import java.util.*;

public class Main{
    public static void quickSort(int[] arr,int left,int right){
        if(left > right){
            return ;
        }
        int l = left;
        int r = right;
        int pivot = arr[(left + right) / 2];
        while(l < r){
            while(arr[l] < pivot){
                l++;
            }
            while(arr[r] > pivot){
                r--;
            }
            if(l == r){
                break;
            }
            int temp = arr[l];
            arr[l] =arr[r];
            arr[r] = temp;

            if(arr[l] == pivot){
                r--;
            }
            if(arr[r] == pivot){
                l++;
            }
        }
        if(l == r){
            l++;
            r--;
        }
        quickSort(arr,left,r);
        quickSort(arr,l,right);
    }
   public static void main(String[] args){
    Scanner sc = new Scanner(System.in);
    int n = sc.nextInt();
    int[] arr = new int[n];
    for(int i = 0;i < arr.length;i++){
        arr[i] = sc.nextInt();
    }
    quickSort(arr,0,arr.length-1);
    for(int i = 0;i < arr.length-1;i++){
        System.out.print(arr[i]+" ");
    }
    System.out.print(arr[arr.length-1]);
   }
}
编辑于 2024-02-05 19:39:22 回复(0)
import java.io.*;
import java.lang.Exception;
import java.util.Arrays;
public class Main{
    public static void main (String args[])throws Exception{
    BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        String str;
        while ((str = bf.readLine()) != null) {
            int len = Integer.valueOf(str);
            String s = bf.readLine();
            String [] strs = s.split(" ");
            int[] arr = new int[strs.length];
            for (int i = 0; i < strs.length; i++) {
                arr[i] = Integer.valueOf(strs[i]);
            }
            quickSort(arr, 0, arr.length-1);
            for (int j = 0; j < arr.length; j++) {
                if (j < arr.length-1) {
                    System.out.print(arr[j]+" ");
                } else {
                    System.out.println(arr[j]);
                }
                 
            }
        }    
}
public static void quickSort(int a[],int s,int t){
     int i,j,tmp;

        if(s<t){
            i=s;
            j = t+1;
            //左边比分界元素小,右边比分界元素大
            while (true){
                //反复执行i+1送i的动作,直到满足a[s]<=a[i]或者i=t;
                //然后反复执行j-1送j的动作,直到满足a[s]>=a[j]或者j=s;
                do i++;
                while (!(a[i]>=a[s]||i==t));
                do j--;
                while (!(a[j]<=a[s]||j==s));
                //若i<j 交换a[i],a[j],若i>=j,交换分界元素与j
                if(i<j){
                    tmp = a[i];
                    a[i] = a[j];
                    a[j] = tmp;
                }
                else {
                    break;
                }
            }
            //分界元素与j交换,j停到了比分界元素小的位置
            tmp = a[s];
            a[s] = a[j];
            a[j] = tmp;
            //当前待排序的序列划分成前后两个子序列
            quickSort(a,s,j-1);
            quickSort(a,j+1,t);
        }
}
}
发表于 2023-02-21 04:56:49 回复(0)
public Class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        List numbers = new ArrayList();
        n = in.nextInt();
        for(int i = 0; i < n; i++){
            num = in.nextInt();
            numbers.add(num);
        }
        int[] a = new int[numbers.size()];
        for(int j = 0; j < number.size(); j++)
            a[i] = numbers.get[i];
        quickSort(a, 0, a.length - 1);

        for(int k = 0; k < a.length; k++){
            System.out.printf(a[k] + " ");
        }



    }
    public void quickSort(int[] a, int l, int r){
        if(l < r){
            int temp = a[1];
            int i = l;
            int j = r;
            while(i != j){
                while((i < j) && (a[j] > temp))
                    --j;
                if(i < j){
                    a[i] = a[j];
                    i++;
                }
                while((i < j) && (a[i] < temp))
                    ++i;
                if(i < j){
                    a[j] = a[i];
                    j--;
                }
            }
            a[i] = temp;
            quickSort(a, l, i-1);
            quickSort(a, i+1, r);
        }
    }
}

发表于 2019-08-03 16:16:56 回复(0)