#include<bits/stdc++.h>usingnamespace std;boolcmpUp(int a,int b)//升序 {return a < b;}boolcmpDown(int a,int b)//降序 {return a > b;}intmain(){int a, odd[15], even[15], oi =0, ei =0;//oi:odd中元素個數(shù) ei:even中元素個數(shù) for(int i =1; i <=10;++i){cin >> a;if(a%2==0)even[++ei]= a;//填充數(shù)組 elseodd[++oi]= a;}sort(odd+1, odd+1+oi, cmpDown);//奇數(shù)降序排序 sort(even+1, even+1+ei, cmpUp);//偶數(shù)升序排序for(int i =1; i <= oi;++i)cout << odd[i]<<' ';for(int i =1; i <= ei;++i)cout << even[i]<<' ';return0;}
插入排序
#include<bits/stdc++.h>usingnamespace std;boolcmpUp(int a,int b)//升序 {return a < b;}boolcmpDown(int a,int b)//降序 {return a > b;}intmain(){int a, odd[15], even[15], oi =0, ei =0;//oi:odd中元素個數(shù) ei:even中元素個數(shù) for(int i =1; i <=10;++i){cin >> a;if(a%2==0){even[++ei]= a;//填充數(shù)組for(int j = ei; j >1;--j){if(even[j]< even[j-1])//偶數(shù)升序排序 swap(even[j], even[j-1]);elsebreak;}}else{odd[++oi]= a;for(int j = oi; j >1;--j){if(odd[j]> odd[j-1])//奇數(shù)降序排序 swap(odd[j], odd[j-1]);elsebreak;}}}for(int i =1; i <= oi;++i)cout << odd[i]<<' ';for(int i =1; i <= ei;++i)cout << even[i]<<' ';return0;}
解法2:整合為一個比較條件
使用STL sort函數(shù)
#include<bits/stdc++.h>usingnamespace std;boolcmp(int a,int b)//返回a排在前面的條件 {if(a%2==1&& b%2==1)//如果都是奇數(shù),更大的排在前面return a > b;elseif(a%2==0&& b%2==0)//如果都是偶數(shù),更小的排在前面 return a < b;else//如果一個是奇數(shù)一個是偶數(shù),奇數(shù)排在前面return a%2==1;//如果a為奇數(shù) a在前面。如果a不是奇數(shù),那么b為奇數(shù),a不能排在前面。 }intmain(){int a[15];for(int i =1; i <=10;++i)cin >> a[i];sort(a+1, a+1+10, cmp);for(int i =1; i <=10;++i)cout << a[i]<<' ';return0;}
使用選擇排序
#include<bits/stdc++.h>usingnamespace std;boolcmp(int a,int b)//返回a排在前面的條件 {if(a%2==1&& b%2==1)//如果都是奇數(shù),更大的排在前面return a > b;elseif(a%2==0&& b%2==0)//如果都是偶數(shù),更小的排在前面 return a < b;else//如果一個是奇數(shù)一個是偶數(shù),奇數(shù)排在前面return a%2==1;//如果a為奇數(shù) a在前面。如果a不是奇數(shù),那么b為奇數(shù),a不能排在前面。 }intmain(){int a[15];for(int i =1; i <=10;++i)cin >> a[i];for(int i =1; i <=9;++i)for(int j = i+1; j <=10;++j)if(cmp(a[j], a[i]))//如果a[j]應(yīng)該在a[i]前面 swap(a[j], a[i]);for(int i =1; i <=10;++i)cout << a[i]<<' ';return0;}