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

线性时间的抉择

2012-08-11 
线性时间的选择下面的代码怎么没有输出结果。。。。。。C/C++ code# includeiostreamusing namespace stdvoid

线性时间的选择
下面的代码怎么没有输出结果。。。。。。

C/C++ code
# include<iostream>using namespace std;void swap(int &a,int &b){    a=a^b;    b=a^b;    a=a^b;}int p(int *a,int left,int right){    int i=left,j=right+1;    int x=a[left];    while(1)    {        while(a[++i]<x&&i<=right);        while(a[--j]>x&&j>=left);        if(i>=j)break;        swap(a[i],a[j]);    }    a[left]=a[j];    a[j]=x;    return j;}int quicksort(int *a,int left,int right,int k){    if(left==right) return a[left];    int m=p(a,left,right);    int j=m-left+1;    if(k<=j)          return quicksort(a,left,m,k);    else        return quicksort(a,m+1,right,k-j);}int main(){    int a[10]={1,5,8,2,1,0,3,9,8,4};    int k;    cin>>k;    cout<<quicksort(a,0,9,k)<<endl;    return 0;}


[解决办法]
这个交换是对的
探讨
引用:
void swap(int &amp;amp;a,int &amp;amp;b)
{
a=a^b;
b=a^b;
a=a^b;
}
怎么用这种错误的代码???
标准库不是有swap吗?
把这个删了再运行看看


删了,也没用

[解决办法]
看看
C/C++ code
int quicksort(int* a, int left, int right, int k){    if(left == right) return a[left];    int m = p(a, left, right);    int j = m + 1;    if(k < j)        return quicksort(a, left, m, k);    else if(k > j)        return quicksort(a, m + 1, right, k);    return a[j-1];} 

热点排行