我的中位數3實施在這裏工作不正常。我必須隨機選擇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;
}
告訴我們爲什麼它不工作會幫助我們幫助你。它編譯失敗嗎?它運行但顯示錯誤?它運行但產生錯誤的結果?它會永遠持續下去嗎? – 2011-04-14 16:55:39
@馬丁霍費爾南德斯當我有樞軸的最左側的元素,它工作正常,但是當我想通過以前3個元素的中位數作爲支點來更改樞軸的值時,它會產生一些垃圾值。 – james 2011-04-14 17:02:47
這是您第五次問這個問題,您的代碼仍然完全破壞。也許你應該把這個任務放在一邊,從簡單的事情開始。 – Blastfurnace 2011-04-14 17:14:57