快速排序的疑问

fx397993401 2010-07-30 10:48:24


# include<iostream>

void swap(int *a,int *b)//注意要传地址
{
int tmp = 0;
tmp = *a;
*a = *b;
*b = tmp;
}
int partition(int data[],int start,int end )//最后是 i到 j-1 的都是小于 data[end] 用这个函数没错
{
int i ,j = -1;
//data[0] = 1000;
if(start < end)
{
for(j = start,i = start;i < end; i ++)
{
if(data[i]<data[end])
{
swap(&data[i],&data[j]);
j++;
}
}
swap(&data[end],&data[j]);
}
return j;
}
int partition1(int data[],int start,int end )//最后是 i到 j-1 的都是小于 这个会有错 why
{
int i ,j = -1;
//data[0] = 1000;
if(start < end)
{
for(j = start+1,i = start+1;i <= end; i ++)
{
if(data[i]<data[start])
{
swap(&data[i],&data[j]);
j++;
}
}
swap(&data[start],&data[j]);
}
return j;
}
void quicksort(int data[],int start,int end)
{
int mid = 0;
if(start< end)
{
mid = partition1(data,start,end);
quicksort(data,start,mid-1);
quicksort(data,mid+1,end);

}
}

void printf(int data[])
{
int len = 10,i ;
for(i = 0;i < len ; i ++)
printf("%d ",data[i]);
}
int main()
{
int data[10] = {10,-232,43422,5,632,72,3,55,12,132};
quicksort(data,0,9);
printf(data);
return 0;
}

...全文
126 点赞 收藏 5
写回复
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
baifudage 2010-08-03
是啊 这才是正真的程序码啊 。。。。。。
回复
fx397993401 2010-07-31
[Quote=引用 1 楼 michael122 的回复:]

C/C++ code

int partition1(int data[],int start,int end )//最后是 i到 j-1 的都是小于 这个会有错 why
{
int i ,j = -1;
//data[0] = 1000;
if(start < end)
{
for(j = st……
[/Quote]

看来我学东西都是学的是皮毛啊
回复
SuperFC 2010-07-30
1楼正确
回复
michael122 2010-07-30

int partition1(int data[],int start,int end )//最后是 i到 j-1 的都是小于 这个会有错 why
{
int i ,j = -1;
//data[0] = 1000;
if(start < end)
{
for(j = start+1,i = start+1;i <= end; i ++)
{
if(data[i]<data[start])
{
swap(&data[i],&data[j]);
j++;
}
}
j--; //少了这句,不减的话j是指向第一个大于start元素的,应该指向最后一个小于start的
swap(&data[start],&data[j]);
}
return j;
}

回复
发动态
发帖子
数据结构与算法
创建于2007-08-27

3.2w+

社区成员

数据结构与算法相关内容讨论专区
申请成为版主
社区公告
暂无公告