输入为两行。 第一行一个整数n(1 ≤ n ≤ 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都在32位int范围内。以空格分隔。
输出一行,即排序之后的数组,以空格分隔,行末无空格
10 293 108 161 783 376 265 330 598 646 812
108 161 265 293 330 376 598 646 783 812
#include<bits/stdc++.h>
using namespace std;
int partition(vector<int> &a,int start,int end){
int small=start;
for(int i=start;i<end;i++){
if(a[i]<a[end]){
swap(a[i],a[small]);
small++;
}
}
swap(a[end],a[small]);
return small;
}
void quicksort(vector<int> &a,int start,int end){
if(start==end) return;
int dex=partition(a,start,end);
if(dex>start) quicksort(a,start,dex-1);
if(dex<end) quicksort(a,dex+1,end);
}
int main(){
int n;
cin>>n;
vector<int> a(n);
for(int i=0;i<n;i++) cin>>a[i];
quicksort(a,0,n-1);
for(int i=0;i<n;i++) {
if(i==0) cout<<a[i];
else cout<<' '<<a[i];
}
cout<<endl;
return 0;
}
package com.algorithm.sort;
import com.algorithm.comparator.ArrayComparator;
public class QuickSort extends ArrayComparator {
public static void quickSort(int[] arr,int L,int R){ //在L到R上排序
if (L<R){
int[] ints = partition(arr, L, R);
quickSort(arr,L,ints[0]);//小于区继续排
quickSort(arr,ints[1],R);//大于区继续排
}
}
//以最后一个位置上的数做划分
//将小于最后一个数的放左边,大于最后一个数的放右边,等于的放中间
//返回排序后返回小于区最后一个数和大于区第一个数
public static int[] partition(int[] arr, int L, int R) {
int less = L - 1; //小于arr[R]的最后一个索引
int more = R; //大于arr[R]的第一个索引
int curr=L;
while (curr < more) {
if (arr[curr] < arr[R]) {
swap(arr, ++less, curr++);
} else if (arr[curr] >arr[R]) {
swap(arr, --more, curr);
} else {
curr++;
}
}
swap(arr,R,curr);
return new int[] { less + 1, more};
}
public static void main(String[] args){
int[] a={4,1,2,8,6,7};
quickSort(a,0,a.length-1);
for (int i = 0; i <a.length; i++) {
System.out.print(a[i]+" ");
}
}
}
#include<iostream>
#include<vector>
using namespace std;
void quickSort(vector<int>& arr, int left, int right)
{
if (left >= right) return ;
int p1 = left;
int p2 = right;
int pivot = arr[p1];
while (p1 < p2)
{
while (p1 < p2 && arr[p2] >= pivot) p2--;
arr[p1] = arr[p2];
while (p1 < p2 && arr[p1] <= pivot) p1++;
arr[p2] = arr[p1];
}
arr[p1] = pivot;
quickSort(arr, left, p1 - 1);
quickSort(arr, p1 + 1, right);
}
int main()
{
int n; cin >> n;
vector<int> arr(n, 0);
for (int i=0; i<n; i++) cin >> arr[i];
quickSort(arr, 0, arr.size() - 1);
for (int i=0; i<n; i++)
{
if (i) cout << " " << arr[i];
else cout << arr[i];
}
return 0;
} #include<stdio.h>
#include<string.h>
#define N 100005
void QuickSort(int str[],int begin,int end){
int left = begin;
int right = end;
if(left>=right) return;//快排不加上终止条件就会内存过大,无限递归
int flag = str[left];
while(left<right){
while(str[right]>flag&&left<right)
right--;
str[left] = str[right];
while(str[left]<flag&&left<right)
left++;
str[right] = str[left];
}
if(left == right) str[left] = flag;
QuickSort(str,begin,left-1);
QuickSort(str,left+1,end);
}
int main(){
int n,i;
int a[100005];
while(scanf("%d",&n)!=EOF && n<=100000 && n>=1){
for(i=0;i<n;i++)
scanf("%d",&a[i]);
}
QuickSort(a,0,n-1);
for(i=0;i<n;i++){
if(i>0) printf(" ");
printf("%d",a[i]);
}
}
#include<stdio.h>
int a[100005],n,i;
void quickSort(int,int);
int main(){
for(scanf("%d",&n),i=0;i<n;i++) scanf("%d",a+i);
quickSort(0,n-1);
for(i=0;i<n;i++) printf("%s%d",i?" ":"",a[i]);
}
void quickSort(int l,int r){
if(l>=r) return;
int mid=a[l],i,left=l,right=r;
while(left<right){
while(left<right&&a[right]>mid) right--;
a[left]=a[right];
while(left<right&&a[left]<=mid) left++;
a[right]=a[left];
}
a[left]=mid;
quickSort(l,left-1),quickSort(left+1,r);
}
#include <iostream>
#include <vector>
using namespace std;
int Partition(vector<int> &A,int p,int r){
int x=A[r];
int i=p-1;
for(int j=p;j<=r-1;++j){
if(A[j]<=x){
++i;
swap(A[i],A[j]);
}
}
swap(A[i+1],A[r]);
return i+1;
}
void QuickSort(vector<int> &A,int p,int r){
if(p<r){
int q=Partition(A,p,r);
QuickSort(A,p,q-1);
QuickSort(A,q+1,r);
}
}
int main(){
int n;
cin>>n;
vector<int> A(n);
for(int i=0;i<n;++i)
cin>>A[i];
QuickSort(A,0,n-1);
for(int i=0;i<n;++i){
cout<<A[i];
if(i!=n-1)
cout<<" ";
}
} def quicksort(s,left,right):
l = left
r = right
if(left>right):
return
temp = int(s[left])
while(l != r):
while(int(s[r])>=temp and l<r):
r -= 1
while(int(s[l])<=temp and l<r):
l += 1
if (l<r):
t = int(s[l])
s[l] = int(s[r])
s[r] = t
s[left]=int(s[l]);
s[l]=temp;
quicksort(s,left,l-1)
quicksort(s,l+1,right)
return s
n = int(input())
right = n-1
s = input().split(" ")
result = quicksort(s,0,right)
print(" ".join(str(i) for i in result)) import java.util.Scanner;
import java.util.Arrays;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int number = Integer.parseInt(in.nextLine());
String[] data = in.nextLine().split(" ");
int[] a = new int[number];
for (int i = 0; i < number; i++) {
a[i] = Integer.parseInt(data[i]);
}
quick(a, 0, a.length - 1);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
public static void quick(int a[], int l, int h) {
if (l >= h) {
return;
}
int p = sort(a, l, h);
quick(a, l, p - 1);
quick(a, p + 1, h);
}
public static int sort(int a[], int l, int h) {
int t = a[h];
int i = l;
for (int j = i; j < h; j++) {
if (a[j] < t) {
swap(a, i, j);
i++;
}
}
swap(a, i, h);
return i;
}
public static void swap(int a[], int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
这个测试和提交不一样啊
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//单趟排序,确定key值
int PartSort(vector<int>& a,int left,int right)
{
//保留key值
int key=a[left];
int hole=left;
while(left<right)
{
//找小
while(left<right&&a[right]>=key)
{
right--;
}
a[hole]=a[right];
hole=right;
//找大
while(left<right&&a[left]<=key)
{
left++;
}
a[hole]=a[left];
hole=left;
}
a[hole]=key;
return hole;
}
void QuickSort(vector<int>& a,int left,int right)
{
if(left>=right)
{
return;
}
int keyi=PartSort(a,left,right);
QuickSort(a,left,keyi-1);
QuickSort(a,keyi+1,right);
}
int main()
{
int n;
cin>>n;
vector<int> arr(n);
for(int i=0;i<n;i++)
{
cin>>arr[i];
}
QuickSort(arr,0,n-1);
for(int i=0;i<n;i++)
{
cout<<arr[i]<<' ';
}
return 0;
} import java.io.*;
import java.lang.Exception;
import java.util.Arrays;
public class Main {
//标准IO
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[] arr, int low, int high) {
if (low >= high) {
return;
}
int i = low;
int j = high;
int key = arr[low];//定义关键字
while ( i < j) {//左指针<右指针
while (arr[i] < key && i < j) {
i++;
}
while (arr[j] > key && i < j) {
j--;
}
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
arr[i] = key;//刚取出的关键字放回中间位置
quickSort(arr, low, i-1);//递归小于关键字的部分重新排序
quickSort(arr, i+1, high);//递归大于关键字的部分重新排序
}
} #include <iostream>
#include <vector>
using namespace std;
void swap(vector<int>& a, int x, int y){
int temp = a[x];
a[x] = a[y];
a[y] = temp;
}
void display(vector<int> a){
for(int i = 0; i < int(a.size()); i++) cout<<a[i]<<' ';
cout<<endl;
}
int partition1(vector<int>& a, int begin, int end){
int pivot = begin;
//display(a);
while(true){
while(begin < end && a[end] > a[pivot]) end--;
while(begin < end && a[begin] <= a[pivot]) begin++;
if(begin < end)
swap(a, begin, end);
else
break;
}
swap(a, begin, pivot);
pivot = begin;
return pivot;
}
int partition2(vector<int>& a, int begin, int end){
int pivot = end;
int low = begin - 1;
for(int high = begin; high <= end - 1; high++){
if(a[pivot] > a[high])
swap(a, ++low, high);
}
swap(a, pivot, low + 1);
pivot = low + 1;
return pivot;
}
int partition3(vector<int>& a, int begin, int end){
int pivot = begin;
while(begin < end){
while(begin < end && a[end] > a[pivot]) end--;
swap(a, pivot, end); pivot = end;
while(begin < end && a[begin] <= a[pivot]) begin++;
swap(a, pivot, begin); pivot = begin;
}
return pivot;
}
void quick_sort(vector<int>& a, int begin, int end){
if(begin < end){
int pivot = partition3(a, begin, end);
quick_sort(a, begin, pivot - 1);
quick_sort(a, pivot + 1, end);
}
}
int main(){
int n = 0;
cin>>n;
vector<int> a(n);
for(int i = 0; i < n; i++) cin>>a[i];
quick_sort(a, 0, a.size() - 1);
for(int i = 0; i < n; i++) cout<<a[i]<<' ';
return 0;
} import java.util.*;
public class Main{
public static void main(String[] args){
Scanner cin=new Scanner(System.in);
int number=Integer.parseInt(cin.nextLine());
String[] data=cin.nextLine().split(" ");
int[] array=new int[number];
for(int i=0;i<number;i++){
array[i]=Integer.parseInt(data[i]);
}
sort(array,0,number-1);
for(int i=0;i<number;i++){
if(i!=number-1)
System.out.print(array[i]+" ");
else System.out.print(array[i]);
}
}
public static void sort(int[] array,int lo,int hi){
if(lo>=hi)return ;
int index=partition(array,lo,hi);
sort(array,lo,index-1);
sort(array,index+1,hi);
}
public static int partition(int[] array,int lo,int hi){
int key=array[lo];
while(lo<hi){
while(array[hi]>=key&&hi>lo)hi--;
array[lo]=array[hi];
while(array[lo]<=key&&hi>lo)lo++;
array[hi]=array[lo];
}
array[hi]=key;
return hi;
}
}
#include <iostream>
using namespace std;
int cmp(const void *a,const void *b){
return *(int *)a - *(int *)b;
}
int main() {
int n;
cin>>n;
int arr[n];
for(int i = 0;i<n;i++){
cin>>arr[i];
}
qsort(arr,n,sizeof(int),cmp);
for(int i = 0;i<n;i++){
cout<<arr[i]<<' ';
}
} package Quick_Sort; import java.util.Arrays; import java.util.Scanner; public class Quick_Sort { public static void main(String args[]){ Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int[] arr = new int[n]; for(int i = 0 ; i < n ; i++){ arr[i] = scanner.nextInt(); } quick(arr,0,arr.length - 1); System.out.println(Arrays.toString(arr)); } public static void quick(int[] arr,int start , int end){ if(start > end){ return; } int tmp = arr[start]; int i = start; int j = end; while (i != j){ while (arr[j] >= tmp && j > i){ j--; } while (arr[i] <= tmp && i < j){ i++; } if(j > i){ int t = arr[i]; arr[i] = arr[j]; arr[j] = t; } } arr[start] = arr[i]; arr[i] = tmp; quick(arr,start,i-1); quick(arr,i+1,end); } }
#include <iostream>
using namespace std;
int idxnum(int* q, int l, int r) {
int idx = q[l];
while (l < r) {
while (l < r && q[r] >= idx) {
--r;
}
q[l] = q[r];
while (l < r && q[l] <= idx) {
++l;
}
q[r] = q[l];
}
q[l] = idx;
return l;
}
void quick_sort(int* q, int l, int r) {
if (l >= r)return ;
int idx = idxnum(q, l, r);
quick_sort(q, l, idx - 1);
quick_sort(q, idx + 1, r);
}
int main() {
int n = 0;
scanf("%d", &n);
int q[n];
for (int i = 0; i < n; i++) {
scanf("%d", &q[i]);
}
int l = 0, r = n - 1;
quick_sort(q, l, r);
for (int i = 0; i < n; i++) {
printf("%d ", q[i]);
}
printf("\n");
}
import java.util.Scanner;
import java.io.*;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) throws Exception{
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String str = null;
while ((str = bf.readLine()) != null) {
int len = str.length();
String[] strs = str.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.printf("%d ", arr[j]);
} else {
System.out.println(arr[j]);
}
}
}
}
private static void quickSort(int[] arr, int start, int end) {
int i = start;
int j = end;
int baseNumber = arr[start];
while (i < j) {
while (i < j && arr[i] < baseNumber) {
i++;
}
while (i baseNumber) {
j--;
}
if (i < j && arr[i] == arr[j]) {
i++;
} else {
int tempNumber = arr[i];
arr[i] = arr[j];
arr[j] = tempNumber;
}
}
if (i - 1 > start) quickSort(arr, start, i - 1);
if (j + 1 < end) quickSort(arr, j + 1, end);
}
}