C++ sort排序 奇數排在前面,偶數排在後面,或者其他奇奇怪怪的功能

去培訓的時候老師講過sort各種奇怪用法,在這裏把文章標題的功能記錄下來先。
例如:給你一個無序數組,給這個數組排序,要求奇數排在前面,偶數排在後面,奇數和偶數都是升序。
這時肯定要寫cmp函數了,這裏引用一個大佬的話:

cmp函數的一個特性就是, 如果return false, 那麼函數就會將他們互換位置, return true就會保持原來位置不變。所以這函數可以解讀爲:x是前面的元素, y是後面的元素。

所以這時,對於題目的cmp函數我們可以這樣寫:

bool cmp(int a,int b)//奇數在前,偶數在後 
{
	if((a%2==0&&b%2==0)||(a%2==1&&b%2==1))return a<b;
	if(a%2==1)return true;
	else return false;
}

可以這麼理解,當兩個數比較時:都是偶數或者奇數就按順序排,前面的數(a)是奇數的話,強制排在前面;前面的數(a)是偶數的話,強制排在後面,那麼就完成我們的工作了。

當然,如果要什麼正數在前負數在後,修改一下cmp的那個第一行就可以啦(也包括其他神神奇奇的操作)

給一個完整程序:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
bool cmp(int a,int b)//奇數在前,偶數在後 
{
	if((a%2==0&&b%2==0)||(a%2==1&&b%2==1))return a<b;
	if(a%2==1)return true;
	else return false;
}
int n,a[1000005];
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&a[i]);
	}
	sort(a+1,a+n+1,cmp);
	for(int i=1;i<=n;i++)
	{
		printf("%d ",a[i]);
	}
}

**參考博客:**https://www.cnblogs.com/Jadon97/p/6897953.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章