题目
洛谷快排 acwing快排
c++快排
#include<iostream>
using namespace std;
void quick_sort(int q[], int l,int r){
if(l>=r) return;
//取一个值为基准,基准左边是小值,右边反之
//i从左到右,j反之
//i>=j遍历完成
//两分,再递归
int mid = q[r+l >> 1],i=l-1,j=r+1;
while(i<j){
do i++;while(q[i]<mid);
do j--;while(q[j]>mid);
if(i<j)swap(q[i],q[j]);
}
quick_sort(q,l,j),quick_sort(q,j+1,r);
}
int main(){
int a[]={1, 2, 5, 9, 3, 4, 6, 7, 10};
quick_sort(a,0,sizeof(a)/sizeof(a[0]) - 1);
for (int i = 0; i < sizeof(a)/sizeof(a[0]); i++)
{
printf("%d ",a[i]);
}
return 0;
}
解答:
#include<iostream>
using namespace std;
const int N = 1e5+10;
int q[N];
void quick_sort(int q[], int l,int r){
if(l>=r) return;
int mid = q[r+l >> 1],i=l-1,j=r+1;
while(i<j){
do i++;while(q[i]<mid);
do j--;while(q[j]>mid);
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]<<' ';
}
return 0;
}
java快排
public static void quickSort(int[] q, int l, int r) {
if (l >= r) return;
int mid = q[r + l >> 1], i = l - 1, j = r + 1;
while (i < j) {
do i++; while (mid > q[i]);
do j--; while (mid < q[j]);
if (i < j)
swap(q, i, j);
}
quickSort(q, l, j);
quickSort(q, j + 1, r);
}
private static void swap(int[] q, int i, int j) {
int temp = q[i];
q[i] = q[j];
q[j] = temp;
}
解答
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int[] q =new int[n];
for (int i = 0; i < n; i++) {
q[i]=in.nextInt();
}
quickSort(q, 0, q.length - 1);
for (int i = 0; i < q.length; i++) {
System.out.printf("%d ", q[i]);
}
}
public static void quickSort(int[] q, int l, int r) {
if (l >= r) return;
int mid = q[r + l >> 1], i = l - 1, j = r + 1;
while (i < j) {
do i++; while (mid > q[i]);
do j--; while (mid < q[j]);
if (i < j)
swap(q, i, j);
}
quickSort(q, l, j);
quickSort(q, j + 1, r);
}
private static void swap(int[] q, int i, int j) {
int temp = q[i];
q[i] = q[j];
q[j] = temp;
}
}
python快排解答
"""
作音: 一只爱吃萝卜的小兔子
日期: 2021年10月14日
"""
"""
作音: 一只爱吃萝卜的小兔子
日期: 2021年10月14日
"""
def quick_sort(q, l, r):
if l >= r:
return
mid = q[r + l >> 1]
i = l-1
j = r+1
while i<j:
while True:
i=i+1
if q[i]>=mid:
break
while True:
j=j-1
if q[j]<=mid:
break
if i<j :
q[i],q[j]=q[j],q[i]
quick_sort(q, l, j)
quick_sort(q, j + 1, r)
def main():
n = int(input())
li = list(map(int, input().split()))
quick_sort(li, 0, len(li) - 1)
for i in li:
print(i, end=' ')
if __name__ == '__main__':
main()
|