分治算法之快速排序-CSDN博客

41 阅读1分钟



上面那个是大一写的(快些),下面那个是大二写的
加两个Linux下bash里面的命令
init 0 关机命令
init 6 重启命令

\

#include<iostream>
#include<cstdio>
using namespace std;

const int maxn=100000;
int a[maxn+7];

void q_sort(int a[],int l,int r){
    if(l>=r) return;
    int i=l,j=r,key=a[l];
    while(i<j){
        while(i<j&&a[j]>=key) j--;
        a[i]=a[j];
        while(i<j&&a[i]<=key) i++;
        a[j]=a[i];
    }
    a[i]=key;
    q_sort(a,l,i-1);
    q_sort(a,i+1,r);
}

int main(){
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++) scanf("%d",a+i);
    q_sort(a,0,n-1);
    printf("%d",a[0]);
    for(int i=1;i<n;i++) printf(" %d",a[i]);
    printf("\n");

    return 0;
}
===========================================================================================================
===========================================================================================================
#include <iostream>
#include <cstdio>
#include <ctime>
#include <cstdlib>
using namespace std;
const int maxn = 1e5+7;
int arrayNum[maxn];
void myQuickSort(int arrayNum[], int low, int high);

int main() {
	int n;
	while (~scanf("%d", &n)){
		for (int i = 0; i < n; ++i){
			scanf("%d", arrayNum+i);
		}
		myQuickSort(arrayNum,0,n-1);
		printf("%d", arrayNum[0]);
		for (int i = 1; i < n; ++i){
			printf(" %d", arrayNum[i]);
		}
		puts("");
	}
	return 0;
}

void myQuickSort(int arrayNum[], int low, int high){
    if (low >= high)
        return;
	int i = low, j = high;
	srand((unsigned)time(NULL));
	int randomNumber = rand() % (high -low) + low;
	swap(arrayNum[low],arrayNum[randomNumber]);
	//上三句用于产生随机数,需要ctime cstdlib两个头文件
	int key = arrayNum[low];
	while (i<j){
		while (i<j && arrayNum[j] >= key)
		  --j;
		arrayNum[i] = arrayNum[j];

		while(i<j && arrayNum[i] <= key)
		  ++i;
		arrayNum[j] = arrayNum[i];
	}
	arrayNum[i] = key;
	myQuickSort(arrayNum, low, i-1);
	myQuickSort(arrayNum, i+1, high);
}
//在南邮1064测试过的快排,注意输入数据为整数
//加了随机算法,速度也没


\