給定你一個長度為n的整數數列。
請你使用快速排序對這個數列按照從小到大進行排序。
並將排好序的數列按順序輸出。
輸入格式
輸入共兩行,第一行包含整數 n
第二行包含 n 個整數(所有整數均在 1∼109 範圍內),表示整個數列。
輸出格式輸出共一行,包含 n 個整數,表示排好序的數列。
C++
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int q[N];
void quick_sort(int q[], int l, int r)
{
if(l >= r)
return;
int i = l-1, j = r+1;
int x = q[(l+r)>>1];
while(i < j)
{
do i++; while(q[i] < x);
do j--; while(q[j] > x);
if(i < j)
swap(q[i],q[j]);
}
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}
int main()
{
int n;
cin >> n;
for(int i = 0; i < n; i++)
cin >> q[i];
quick_sort(q,0,n-1);
for(int i = 0; i < n; i++)
cout << q[i] << " ";
}
Python
import random
n = int(input())
nums = [int(x) for x in input().split()]
def quick_sort(nums, l, r):
if l >= r:
return
i = l
j = r
x = nums[random.randint(l,r)]
while i <= j:
while nums[i] < x: i += 1
while nums[j] > x: j -= 1
if i <= j:
nums[i], nums[j] = nums[j], nums[i]
i += 1
j -= 1
quick_sort(nums,l,j)
quick_sort(nums,j+1,r)
quick_sort(nums, 0, n-1)
for i in range(n):
print(nums[i], end=" ")
Java
import java.util.*;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int[] q = new int[n];
for(int i = 0; i < n; i++)
q[i] = sc.nextInt();
quick_sort(q, 0, n-1);
for(int i = 0; i < n; i++)
System.out.print(q[i] + " ");
}
public static void quick_sort(int[] q, int l, int r){
if(l >= r)
return;
int i = l-1, j = r+1, x = q[(l+r)>>1];
while(i < j){
while(q[++i] < x);
while(q[--j] > x);
if(i < j){
int t = q[i];
q[i] = q[j];
q[j] = t;
}
}
quick_sort(q, l, j);
quick_sort(q, j+1, r);
}
}