您的位置:首页 > 其它

(数组)数组排序,使所有奇数在左边,所有偶数在右边

2015-04-28 15:18 253 查看

题目:

在一个N个整数数组里面,有多个奇数和偶数,设计一个排序算法,令所有的奇数都在左边。
请完成sort的代码实现(C++或Java)
C++:
void sort(int N, int[]a)
{

}

例如: 当输入a = {8,4,1,6,7,4,9,6,4},
a = {1,7,9,8,4,6,4,6,4}为一种满足条件的排序结果

思路:

1、Partition过程,从数组左右两边往中间扫,找到左边第一个偶数,找到右边第一个奇数,然后左右交换,直至二者相遇。

2、遍历数组,遇到奇数则将它依次放在左边的位置,并与该位置的偶数交换,即第1个奇数放在第1个位置,第2个奇数放在第2个位置。。。具体实现参考代码。

代码:

#include <iostream>

using namespace std;

void swap(int &a,int &b){
int tmp;
tmp=a;
a=b;
b=tmp;
}

void sort_1(int n,int a[]){
int left=0,right=n-1;
while(left<right){
while((a[left]&1)==1 && (left<right)) left++;
while((a[right]&1)==0 && (left<right)) right--;
if(left<right){
swap(a[left],a[right]);
left++;
right--;
}
}
}

void sort_2(int n,int a[]){
int cnt=0;
int tmp;
for(int i=0;i<n;i++){
if(a[i]&1){
tmp=a[cnt];
a[cnt]=a[i];
a[i]=tmp;
cnt++;
}
}
}

int main()
{
int a[]={3,4,2,5,9,8,7,6,0,1};
int n=sizeof(a)/sizeof(a[0]);

sort_1(n,a);
for(int i=0;i<n;i++)
cout<<a[i]<<" ";
cout<<endl;

int b[]={3,4,2,5,9,8,7,6,0,1};
sort_2(n,b);
for(int i=0;i<n;i++)
cout<<b[i]<<" ";
cout<<endl;
return 0;
}


运行结果:

两种方法的思路不一样,因此结果也不一致。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐