首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

快排解决思路

2012-03-13 
快排#include iostreamint Partition(int array[],int low,int high){int temparray[0]int pivotarra

快排
#include <iostream>
int Partition(int array[],int low,int high)
{
int temp=array[0];
int pivot=array[0];
while(low<high)
{
if(low<high && pivot<=array[high])
--high;
array[low]=array[high];
if(low<high && array[low]<=pivot)
++low;
array[high]=array[low];
}
array[low]=temp;
return low;
}
void QuickSort(int array[],int low,int high)
{
int pivot=0;
if(low<high)
{
pivot=Partition(array,low,high);
QuickSort(array,low,pivot-1);
QuickSort(array,pivot+1,high);
}
}
int main()
{
int i;
int a[]={49,38,65,97,76,13,27};
QuickSort(a,0,6);
for(i=0;i<7;i++)
{
printf("%d,",a[i]);
}
system("pause");
}
哪位大虾能告诉我一下,为什么我这个快排的结果不对呢?

[解决办法]
你的Partition函数有问题吧,下面是我改的,才疏学浅如有错误请见谅。

int Partition( int array[],int low,int high )
{
int temp = array[high] ;
while( low<high ){
while( low<high && array[low]<=temp )
low++;
if( low<high )
{
array[high] = array[low] ;
high-- ;
}
while( low<high && array[high]>=temp )
high-- ;
if( low<high )
{
array[low] = array[high] ;
low++ ;
}
}
array[low] = temp ;
return low ;
}
[解决办法]
你这里的错误有两个,是在Partition函数中。
首先是pivot这个区分值的问题,注释中有说明明。
另一个就是在与区分值进行比较时应该当是循环进行的。你使用的是if,你可以自己手工实现一下这个排序,你可以发现为什么要用while而不是if。

顺便,你是使用C++来写代码的。可是,你使用C++写出了C的代码。。。这个是很不幸的。
因为C++中的面向对象思想完全没有体现。
并且,你使用了<iostream>标准头文件,但却中代码中使用了printf这种。。。。
建议要再了解一下C++相关概念。

然后,看在打了这么多字的面子上,给个分呗~~~

C/C++ code
#include <iostream>using namespace std;int Partition(int array[], int low, int high){    int pivot = array[low];    // 这里,你是让pivot每次都等于array[0],这导致后半段的快排出错    // pivot应该就是区分值,你这里选择的区分值是每段序列的第一个数字。    // 所以每段序列的第一个数字应该就是array[low]    while(low < high)    {        while(low < high && pivot <= array[high]) // 这里你的程序中是if。            --high;        array[low]=array[high];        while(low < high && array[low] <= pivot)            ++low;        array[high]=array[low];    }    array[low]=pivot;    return low;}void QuickSort(int array[], int low, int high){    int pivot=0;        if(low < high)    {        pivot = Partition(array, low, high);        QuickSort(array, low, pivot-1);        QuickSort(array, pivot+1, high);    }}int main(void){    int i;    int a[]={49, 38, 65, 97, 76, 13, 27};    QuickSort(a, 0, 6);        printf("结果为:\n");    for(i=0; i<7; i++)    {        printf("%d ", a[i]);    }    system("pause");} 

热点排行