今天暑期集训的第一天,浑浑噩噩的度过了一天。感觉有一点手足无措,什么都没有学到,急切地感觉到我需要一份假期学习计划,不能这样漫无目的的学习,荒度时光,既然留在这里了,就一定要学到一点东西,哪怕只是一点点,明天再简单地学一点,在明天之类就一定要拟定一份假期学习计划。今天学的东西是一些简单的排序,本来早就该掌握的,我却到现在才来慢慢的学。
快排的基本思想就是:在一系列数中选定一个作为标准,然后挨个与之比较,比他大的放在一边,比他小的放在另一边。再在这两边分别用此种方法,依次递归,直到排序完成。我的方法是选定最右边的数作为标准数。
例题是pku2388.
以下是快排的代码:
#include<cstdio>
#include<iostream>
#define N 120
using 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 10005
using 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;
}