您的位置:首页 > 产品设计 > UI/UE

快速排序----QuickSort 中位数实现

2015-08-10 19:17 211 查看
注意事项:

QuickSort(data, seq, low_org, low-1);
QuickSort(data, seq, low+1, high_org);


递归函数QuickSort中最后递归调用的时候,因为 中位数的值pivot已经处于数组中的正确位置,因此 必须采用 low-1 和 low+1,这样才能不断减小递归调用时数组的长度,否则在数组中存在两个相同数据时将产生无限次的递归调用

#include<iostream>
#include<string>
using namespace std;
void QuickSort(int data[], int seq[], int low, int high);

int _tmain(int argc, _TCHAR* argv[])
{
int number[10] = {4,23,9,11,5,63,5,33,8,100};
int seq[10] = {1,2,3,4,5,6,7,8,9,10};
QuickSort( number, seq, 0, 9 );

for(int i = 0; i < 10; i++)
cout << number[i] << endl;

return 0;
}

void QuickSort(int data[], int seq[], int low, int high)
{
if( low < high )
{
int pivot = data[ (low+high)/2 ];
int tmp;

//data[ (low+high)/2 ] = data[low];
//data[low] = pivot;

int low_org = low;
int high_org = high;

while( low < high )
{
while( data[high] > pivot )
high--;
while( data[low] <= pivot && low < high )
low++;

if( low < high )
{
tmp = data[low];
data[low] = data[high];
data[high] = tmp;

tmp = seq[low];
seq[low] = seq[high];
seq[high] = tmp;
}
}

//tmp = data[low];
//data[low_org] = tmp;
//data[low] = pivot;
//tmp = data[ (low_org+high_org )];
//data[ (low+high)/2 ] = data[low];
//data[low] = tmp;

QuickSort(data, seq, low_org, low-1); QuickSort(data, seq, low+1, high_org);}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: