【发布时间】:2011-04-14 16:53:06
【问题描述】:
我的中位数 3 实现在这里无法正常工作。我必须随机选择 3 个数字作为媒介,这是我的代码,请帮助我。
#include"stdafx.h"
#include <iostream>
#include<algorithm>
using namespace std;
#define size 10
int i;
void show(int* array, int n);
int partition(int* array, int pValue, int left, int right);
void QuickSort(int* array, int left, int right);
int main(void)
{
int array[size];
int i;
for( i = 0; i < size; i++)
{
array[i]=rand()%100;
}
cout<<endl<<"The random generated numbers are: "<<endl;
show(array, size);
QuickSort(array,0,size - 1);
cout<<endl<<"The sorted numbers are : "<<endl;
show(array, size);
system("pause");
return 0;
}
void show(int* array, int n)
{
int i;
for( i = 0; i < n; i++) cout<<array[i]<<'\t';
}
void QuickSort(int* array, int left, int right)
{
for(i=0;i<3;i++)
{
array[i]=array[rand()%100];
}
stable_sort(array,array+3);
int p=array[(i+1)/2];
//int p = array[left];
int split;
if(right > left)
{
split = partition(array, p, left, right);
array[split] = p;
QuickSort(array, left, split-1);
QuickSort(array, split+1, right);
}
}
int partition(int* array, int p, int left, int right)
{
int lb = left;
int rb = right;
while(lb < rb)
{
while( p < array[rb]&& rb > lb)
{
rb--;
}
swap(array[lb], array[rb]);
while( p >= array[lb]&& lb < rb)
{
lb++;
}
swap(array[rb], array[lb]);
}
return lb;
}
【问题讨论】:
-
告诉我们它为什么不起作用会帮助我们帮助您。它编译失败吗?它运行但显示错误?它会运行但产生错误的结果吗?它会永远持续下去吗?
-
@ Martinho Fernandes 当我在最左边的元素中枢轴时,它工作正常,但是当我想通过将前 3 个元素的中值作为枢轴来更改枢轴的值时,它会产生一些垃圾值。跨度>
-
这是您第 5 次提出此问题,但您的代码仍然完全损坏。也许你应该把这个任务放在一边,从更简单的事情开始。
-
这显然不是 C 代码。
标签: c++ algorithm sorting quicksort