首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

关于非随机快排的有关问题

2012-09-03 
关于非随机快排的问题各位大师们,求救了,SOS,为什么这样子不行呢?#includestdio.hvoid Swap(int &a,int

关于非随机快排的问题
各位大师们,求救了,SOS,为什么这样子不行呢?
#include<stdio.h>
void Swap(int &a,int &b)
{
int c;
c=a;
a=b;
b=c;
}
int partion(int a[],int left,int right)
{
int value=a[left],i,j;
  i=left+1,j=right;
while(true)
{
while(a[i]<value) i++;
while(a[j]>value) j--;
if(i>=j) break;
Swap(a[i],a[j]);
}
Swap(a[i],a[left]);
return i;
}
void quicksort(int a[],int left,int right)
{
if(left<right)
{
int i;
i=partion(a,left,right);
quicksort(a,left,i-1);
  quicksort(a,i+1,right);
}
}
void main()
{
int b[10]={3,2,4,-65,29,100,5,7,101,34};
quicksort(b,0,9);
for(int i=0;i<10;i++)
printf("%d ",b[i]);
}


[解决办法]

C/C++ code
for(int i=0;i<10;i++)
[解决办法]
C/C++ code
int partition(int a[], int left, int right){    int value = a[right];    int i, j;    i = left - 1;    j = left;    while (j < right)    {        if (a[j] <= value)        {            i++;            Swap(&a[i], &a[j]);        }        j++;    }    Swap(&a[i + 1], &a[right]);    return i + 1;}
[解决办法]
C/C++ code
void Swap(int *a,int *b){    int c;    c=*a;    *a=*b;    *b=c;}
[解决办法]
先把swap改成那样的,再该partition


C/C++ code
int partition(int a[],int left,int right){    int value=a[left],i,j;        i=left+1;    j=right;    while(1)    {        while(a[i]<value && i <= right) i++;  //不加这个条件数组可能越界        while(a[j]>value) j--;        if(i>=j) break;        Swap(&a[i],&a[j]);    }    Swap(&a[i - 1],&a[left]);    return i - 1;} 

热点排行