注册 登录
编程论坛 C++教室

给定整型数组,排序,要求奇数在前,偶数在后,求更简单方法

wengbin 发布于 2016-03-12 21:42, 3252 次点击
程序代码:
  #include<iostream>
   void Sort(int *nums,int length);
   void Sort(int *nums,int length)
   {
        int count_p=0;
        for(int i=0;i<length;i++)
        {
            if(nums[i]%2!=0)count_p++;
        }
        std::cout<<count_p<<std::endl;
        //排奇偶
        for(int i=0,j=0;i<count_p;i++)
        {
            if(nums[i]%2!=0);//奇,跳过
            else
            {
                for(j=i+1;j<length,nums[j]%2==0;j++);
                int temp=nums[i];
                nums[i]=nums[j];
                nums[j]=temp;
            }
        }

        for(int i=0;i<count_p;i++)
        {
            for(int j=i+1;j<count_p;j++)
            {
                if(nums[i]>nums[j])
                {
                    int temp=nums[i];
                    nums[i]=nums[j];
                    nums[j]=temp;
                }
            }
        }
        for(int i=count_p;i<length;i++)
        {
            for(int j=i+1;j<length;j++)
            {
                if(nums[i]>nums[j])
                {
                    int temp=nums[i];
                    nums[i]=nums[j];
                    nums[j]=temp;
                }
            }
        }
   }
   int main()
   {
       int a[10]={22,8,7,20,5,4,3,9,1,31};
       Sort(a,10);
       for(int i=0;i<10;i++)std::cout<<a[i]<<"\t";
       std::cout<<std::endl;
       return 0;
   }
4 回复
#2
yangfrancis2016-03-13 18:57
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
bool rearrange(int m1,int m2)
{
    if(m1%2!=m2%2)
        return m1%2==1;
    else
        return m1<m2;
};
int main()
{
    vector<int>arr;
    vector<int>::iterator iter;
    arr.push_back(5);
    arr.push_back(8);
    arr.push_back(87);
    arr.push_back(3);
    arr.push_back(10);
    arr.push_back(20);
    for(iter=arr.begin();iter!=arr.end();iter++)
        cout<<*iter<<endl;
    std::sort(arr.begin(),arr.end(),rearrange);
    cout<<"排序后\n";
    for(iter=arr.begin();iter!=arr.end();iter++)
        cout<<*iter<<endl;
    return 0;
}
#3
wengbin2016-03-14 11:45
回复 2楼 yangfrancis
感谢,请问sort()函数是如何利用第三个参数传入的那个二目运算函数的呢?麻烦您讲解一下
#4
yangfrancis2016-03-14 12:47
那第三个参数就是排序规则的函数名,该函数两个参数是进行排序的两个元素。函数返回真,第一个参数排前,返回假第二个参数排前。用sort时矢量中的元素两个两个地都排第三个参数定义的函数排序。
#5
天使梦魔2016-03-14 14:36
我就不明白了,位运算比四则运算快不知道多少倍。不是要简单粗暴么?



程序代码:
int min=1;
    int max=10;
    for(int i=min;i<=max;i++)
    {
        if(i&1)
            cout<<"单数:"<<i<<endl;
        else
            cout<<"双数:"<<i<<endl;
    }
1