$$\color{Red}{快速排序-三种语言代码}$$
我的网站=> 分享了我关于前后端的各种知识和生活美食~
我于Acwing平台分享的零散刷的各种各样的题
题目介绍
给定你一个长度为 n 的整数数列。
请你使用快速排序对这个数列按照从小到大进行排序。
并将排好序的数列按顺序输出。
输入格式
输入共两行,第一行包含整数 n。
第二行包含 n 个整数(所有整数均在 1 ∼ 10 ^ 9 范围内),表示整个数列。
输出格式
输出共一行,包含 n 个整数,表示排好序的数列。
数据范围
1 ≤ n ≤ 100000
输入样例:
5
3 1 2 4 5
输出样例:
1 2 3 4 5
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();
QuickSort(q, 0, n-1);
for (int i=0; i<n; i++) System.out.print(q[i] + " ");
}
private static void QuickSort(int [] q, int l, int r) {
if (l >= r) return;
int x = q[l + r >> 1], i = l - 1, j = 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;
}
}
QuickSort(q, l, j);
QuickSort(q, j+1, r);
}
}
C++代码
#include <iostream>
using namespace std;
const int N = 1000010;
int q[N];
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)
{
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;
scanf("%d", &n);
for (int i = 0; i < n; i ++ ) scanf("%d", &q[i]);
quick_sort(q, 0, n - 1);
for (int i = 0; i < n; i ++ ) printf("%d ", q[i]);
return 0;
}
Python3代码
def quick_sort(data, l, r):
if l >= r:
return
i, j = l-1, r+1
x = data[(i + j)// 2]
while i < j:
while 1:
i += 1
if data[i] >= x:
break
while 1:
j -= 1
if data[j] <= x:
break
if i < j:
data[i], data[j] = data[j], data[i]
quick_sort(data, l, j)
quick_sort(data, j+1, r)
if __name__ == "__main__":
n = int(input())
data = [int(x) for x in input().split()]
quick_sort(data, 0, n-1)
for i in data:
print(i, end=' ')