+ -
当前位置:首页 → 问答吧 → 选中值快速排序,各位帮忙看看哪里出问题了?

选中值快速排序,各位帮忙看看哪里出问题了?

时间:2011-12-02

来源:互联网

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

void quicksort(int *a, int size);
void quicksort(int *a, int l[code=C/C++][/code]ow, int high);
void divide(int *a, int low, int high, int midl, int midh);

int main()
{
ifstream fin("quicksort.in");
ofstream fout("quicksort.out");

int n, d;
fin>>n>>d;
int *a=new int [n];
for(int i=0; i<n; ++i) {
fin>>a[i];
}

quicksort(a, n);

for(int i=0; i<n;++i) {
cout<<a[i]<<endl;
}
return 0;
}

void quicksort(int *a, int size) 
{
quicksort(a, 0, size-1);
}

void quicksort(int *a, int low, int high)
{
int midl=low, midh=high;
if(low>=high) return;
else {
divide(a, low, high, midl, midh);

quicksort(a, midh+1, high);
quicksort(a, low, midl-1);
}
}

void divide(int *a, int low, int high, int midl, int midh)
{
int *tArray=new int[high-low+1];
int median=(a[low]+a[high]+a[(high+low+1)/2]+1) / 3;
int i=0, j=high-low;
for(int p=low; p<=high; ++p) {
if(a[p]<median) tArray[i++]=a[p];
else if(a[p]>median) tArray[j--]=a[p];
}
midl=i;
midh=j;
for(int k=i; k<=j; ++k) tArray[k]=median;
int tmpi=0;
for(int k=low; k<=high; ++k) a[k]=tArray[tmpi++];
}

作者: superjarry   发布时间: 2011-12-02

n是元素个数,d忽略

作者: superjarry   发布时间: 2011-12-02