面试题-排序

yhl05050118 2008-10-31 06:31:08
设计一函数sort(char array[],int n)实现把array中下于等于0的数排在前面,大于0的数排在后面 时间复杂度o(n)
...全文
240 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
zyouth 2011-03-04
  • 打赏
  • 举报
回复
学习了
yhl05050118 2008-11-01
  • 打赏
  • 举报
回复
没说。
应该只要是小于0等于的在前面,大于0在后面就行!
yhl05050118 2008-11-01
  • 打赏
  • 举报
回复
谢谢各位了!
bitxinhai 2008-10-31
  • 打赏
  • 举报
回复
一趟快速排序就行了!!!
enrico 2008-10-31
  • 打赏
  • 举报
回复
惭愧,没考虑到里面全是大于0或者小于等于0
lhz62004753 2008-10-31
  • 打赏
  • 举报
回复
这个问题是快速排序的一部分,你要的代码如下:
void main()
{
int a[10]={4,0,-2,-6,8,12,-1,9,33,-9};
int i=0,j=10-1;
int x=a[i];
while(i<j)
{
while(i<j && a[j]>0)//从右到左查找小于x的元素
j--;
if(i<j)
{
a[i]=a[j];//找到则交换
i++;
}
while(i<j && a[i]<=0)//从左到右查找大于x的元素
i++;
if(i<j)
{
a[j]=a[i];//找到则交换
j--;
}
}
a[i]=x;
for(i=0; i<10; i++)
printf("%4d",a[i]);
printf("\n");
}
lhz62004753 2008-10-31
  • 打赏
  • 举报
回复
这个问题是快速排序的一部分,你要的代码如下:
void main()
{
int a[10]={4,0,-2,-6,8,12,-1,9,33,-9};
int i=0,j=10-1;
int x=a[i];
while(i<j)
{
while(i<j && a[j]>0)//从右到左查找小于x的元素
j--;
if(i<j)
{
a[i]=a[j];//找到则交换
i++;
}
while(i<j && a[i]<=0)//从左到右查找大于x的元素
i++;
if(i<j)
{
a[j]=a[i];//找到则交换
j--;
}
}
a[i]=x;
for(i=0; i<10; i++)
printf("%4d",a[i]);
printf("\n");
}
yangkunhenry 2008-10-31
  • 打赏
  • 举报
回复

#include<iostream>
using namespace std;
void change(int *arr,const int len)
{
int i=0,j=len-1;
while(i<j)
{
while(arr[i]==0&&i<j)
i++;
while(arr[j]!=0&&i<j)
j--;
if(i<j)
{
arr[i]^=arr[j];
arr[j]^=arr[i];
arr[i]^=arr[j];
i++;
j--;
}
}
}
int main()
{
int arr[]={2,0,4,0,0,5,3,9};
int len=sizeof(arr)/sizeof(*arr);
change(arr,len);
for(int i=0;i<len;++i)
cout<<arr[i]<<" ";
return 0;
}

前两天刚写过
enrico 2008-10-31
  • 打赏
  • 举报
回复

sort(int array[],int n) {
int front = 0, end = n-1;
int tmp;
while (front < end) {
while (array[front] <= 0) {
++front;
}
while (array[end] > 0) {
--end;
}

if (front < end) {
tmp = array[front];
array[front] = array[end];
array[end] = tmp;
++front;
--end;
}
}
}

太乙 2008-10-31
  • 打赏
  • 举报
回复
两头往中间走?相当于快速排序
taojian_hhu 2008-10-31
  • 打赏
  • 举报
回复
把0看成无穷小啊
baihacker 2008-10-31
  • 打赏
  • 举报
回复
大于0的数排在后面

顺序变不变?

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧