快速排序

来源:互联网 发布:和玛丽苏开玩笑 知乎 编辑:程序博客网 时间:2024/06/10 08:44

今天暑期集训的第一天,浑浑噩噩的度过了一天。感觉有一点手足无措,什么都没有学到,急切地感觉到我需要一份假期学习计划,不能这样漫无目的的学习,荒度时光,既然留在这里了,就一定要学到一点东西,哪怕只是一点点,明天再简单地学一点,在明天之类就一定要拟定一份假期学习计划。今天学的东西是一些简单的排序,本来早就该掌握的,我却到现在才来慢慢的学。

       快排的基本思想就是:在一系列数中选定一个作为标准,然后挨个与之比较,比他大的放在一边,比他小的放在另一边。再在这两边分别用此种方法,依次递归,直到排序完成。我的方法是选定最右边的数作为标准数。

       例题是pku2388.

以下是快排的代码:

      

#include<cstdio>#include<iostream>#define N 120using namespace std;void QuickSort(int left ,int right ,int a[]){    if(right<left+2){        if(a[left]>a[right])            swap(a[left], a[right]);        return ;    }    int i=left, j=right, x = a[right];    while(i<j){        while(a[i]<x && i<j) i++;        while(a[j]>=x && i<j) j--;        swap(a[i], a[j]);    }    swap(a[i], a[right]);    if(left < i-1) QuickSort(left, i-1, a);    if(i+1 < right) QuickSort(i+1, right, a);}int main(){    int n;    int b[N];    scanf("%d", &n);    for(int i = 0; i<n; i++)        scanf("%d", &b[i]);    QuickSort(0,n-1,b);    for(int i = 0; i<n; i++)       printf("%d ", b[i]);    return 0;}
以下是例题代码:

<span style="font-size:18px;">#include<stdio.h>#include<cstring>#include<algorithm>#include<iostream>#define N 10005using namespace std;void qsort(int left ,int right, int a[]){    int i , j, x;    if(right<left+2){        if(a[left]>a[right])            swap(a[left], a[right]);        return ;    }    i = left, j = right, x = a[right];   while(i<j){         while(a[i]<x && i<j) i++;         while(a[j]>=x && i<j) j--;         swap(a[i], a[j]);   }   swap(a[i], a[right]);   if(left<i-1) qsort(left, i-1, a);   if(i+1<right) qsort(i+1, right,a);}int main(){    int n ;    int a[N];    scanf("%d", &n);    for(int i = 0; i<n; i++)        scanf("%d",&a[i]);        qsort(0,n-1,a);        int r = a[n/2];        printf("%d\n", r);    return 0;}


0 0
原创粉丝点击