1. 程式人生 > >調整一個數組中的偶數位於奇數的後面

調整一個數組中的偶數位於奇數的後面

#include <iostream>

using namespace std;

#include "vector"


/* 麻煩的方法:1. 首先確定奇數的個數
             2. 然後開始從第一個位置掃描如果遇到偶數,則從這個位置開始後的所有數向前移動一個位置,如果遇到奇數則跳過
             3. 迴圈的結束條件為從頭開始指向的指標移動的位置數目等於奇數的個數*/

void doShuzu(vector<int> & a){


    int i = 0;

    int length = a.size() - 1;

    int
jishu = 0; while (i <= length) { if((a[i] & 0x1) == 1) jishu++; i++; } i = 0; while(i != jishu){ if((a[i]& 0x1) == 0){ int temp = a[i]; for(int j = i; j < length; j++){ a[j] = a[j + 1]; } a[length] = temp; }else
i++; } } /* 簡單的方法:1. 使用兩個指標,第一個指標指向陣列的第一個位置,第二個指標指向陣列的結尾,只向前移動。 2. 在兩個指標相遇之前,第一個指標永遠在第二個指標的前面,如果第一個指標指向的是偶數,第二個指標指向的是奇數,則交換兩個陣列 */ void ReorderOddEven(int *pData,unsigned int length){ if(pData == NULL || length == 0) return; int *pBegin = pData; int
*pEnd = pData + length - 1; while (pBegin < pEnd) { while ((*pBegin & 0x1) == 1 && pBegin < pEnd) { pBegin++; } while ((*pEnd & 0x1) == 0 && pBegin < pEnd) { pEnd--; } if(pBegin < pEnd){ *pBegin = *pBegin + *pEnd; *pEnd = *pBegin - *pEnd; *pBegin = *pBegin - *pEnd; } } } /* 抽象:1. ORder 根據 func 的標準把陣列 pData 分成兩部分 2. isEven 則是一個具體的標準,即判斷一個數是不是偶數。 */ bool isEven(int n){ return (n & 1) == 0; } void Reorder(int *pData,unsigned int length, bool (*func) (int)){ if(pData == NULL || length == 0) return; int *pBegin = pData; int *pEnd = pData + length - 1; while (pBegin < pEnd) { while ((*pBegin & 0x1) == 1 && !func(*pBegin)) { pBegin++; } while ((*pEnd & 0x1) == 0 && func(*pEnd)) { pEnd--; } if(pBegin < pEnd){ *pBegin = *pBegin + *pEnd; *pEnd = *pBegin - *pEnd; *pBegin = *pBegin - *pEnd; } } } int main(int argc, const char * argv[]) { // insert code here... vector<int> a ; a.push_back(1); a.push_back(2); a.push_back(3); a.push_back(4); a.push_back(5); a.push_back(6); a.push_back(7); int a1[6] = {1,2,3,4,5,6}; //doShuzu(a); //ReorderOddEven(a1, 6); Reorder(a1, 6, isEven); for (int i =0 ; i < 6; i++) { cout<<a1[i]<<endl; } return 0; }

相關推薦

調整個數偶數位於奇數後面

#include <iostream> using namespace std; #include "vector" /* 麻煩的方法:1. 首先確定奇數的個數 2. 然後開始從第一個位置掃描如果遇到偶數,則從這個位

使個數的全部奇數位於偶數之前

使一個數組中的所有奇數都位於偶數之前, 用變數left 來儲存陣列左邊的偶數, 用變數 right 來儲存陣列右邊的奇數, 建立一個迴圈, 迴圈的結束條件是left < right 在迴圈之中分別對 left 與 right 進行判斷, 如果 left 裡的元素為偶數, right

個數所有的奇數放左邊,偶數放右邊

package com.itheima.homework; /*34、定義一個方法,接收一個int陣列,在方法內新建一個數組, 將傳進來的陣列中的元素裝進去,但是要求奇數在左邊偶數在右邊。 最後返回這個新陣列。在main方法中呼叫定義陣列,呼叫該方法,獲取返回值, 並遍

c語言 將個數奇數偶數分開放在一起

       在一個數組中的元素大多奇數和偶數是混在一起的,而將陣列中元素奇數和偶數分開存放則是我們要解決的問題。        將奇數和偶數分開存放然後打印出來的思路是先建立兩個空間,將奇數和偶數分別存放起來,然後

python:YY校招試題--傳入個數進行排序,奇數在前進行升序,偶數在後進行降序

a = input() # 輸入使用空格進行進行間隔 num = [int(n) for n in a.split()] print(num) def mysort(a,ascending=True): # 插入排序,a為list陣列,ascending=True時升

【Python】求個數奇數的立方的和

問題 給出一個數字的陣列,找出其中的奇數,將他們各自的立方和相加,返回結果 思路 陣列 迴圈 判斷 求和 解決方法 sum求和,內部迭代判斷奇偶 def cube_odd(arr):

刪除個數某個值

sso x11 line space alt col pac ber dex #include<stdio.h> int tab[10]={0,1,2,3,5,5,5,7,7,9}; void deleteMember(int mem){ int i

獲取在個數出現最多的字符及其所在的位置

blog 數組 body asc i++ cnblogs attr 次數 獲取 獲取在一個數組中出現最多的字符、個數及其所在的位置 <!DOCTYPE html> <html> <head> <title>一個數組中,出現

快速找出個數的兩個數字,讓這兩個數字之和等於一個給定的值

http 知識 繼續 進一步 repl 有一個 tails 窮舉 too 我覺得寫得很清晰,希望沒有侵犯作者的著作權,原文地址http://blog.csdn.net/hackbuteer1/article/details/6699642 快速找出一個數組中的兩個數字,讓這

個數找出現次數超過一半的數字

數組中出現次數超過一半的數字package Suanfa; /** * @author jixiang * 在一個數組中找到次數超過一半的數字 */ public class MoreThanHalfNum { public static void main(String[] args) {

尋找個數未出現的最小正整數(數元素可重復)

個數 pre doesn inf tput swe return 分享圖片 針對 題目描述 Description Given nn non-negative integers, please find the least non-negative integer that

leetcode-575-Distribute Candies(計算個數元素的種類的快速方法)

題目 簡單的 快速排序 span NPU bin 又是 return 推薦 題目描述: Given an integer array with even length, where different numbers in this array represent diff

O(n)求個數連續區間和的最大值

return 區間 scan CI spa 最大 %d 區間和 數組 int n, a[5000]; int main(){ scanf("%d", &n); for (int i = 1; i <= n; i++)cin >>

個數個數的和為N,找出這兩個數字的下標

完整 進行 代碼 ray 由於 比較 返回 put else 分析,兩個數字的和為N。那麽這兩個數字是否是唯一的呢?輸出的下標是否是第一對出現的呢? 1,我們假設這兩個數字是唯一的 和是唯一的,那麽其中一個數字越大,另一個數字就越小。想到大小關系,我們就想到了排序。那麽首先

個數最大值與最小值

div return urn 技術 code include 一個 最小值 array #include <stdio.h> int main() { int array[10]={100,1,40,29,45,22,98,2,83,75};

位運算解決“個數,只有一個數字出現n次,其他數字出現k次”問題

不重復 blog ron 運用 ons 利用 缺失 tail 位運算符 轉自:https://blog.csdn.net/monster_girl/article/details/52928864 在學習完位操作後,經常會遇到一類關於查找缺失整數的問題。 第一類是給你一個

C#獲取個數的最大值、最小值、平均值

program min bsp max exc 平均值 style 最大 return C#獲取一個數組中的最大值、最小值、平均值 1.給出一個數組 1 int[] array = new int[] { 1,2,4,3,0,-1,34,54

個數的各個元素拼接組合,得到數字最大的組合

將一個數組中的各個元素拼接組合,得到數字最大的組合。 如:int[] arr = new int[5] {1, 26, 56, 894, 5648}; 拼接組合後最大的數為 564

C語言:個數只有兩個數字是出現

1 //1.一個數組中只有兩個數字是出現一次, 2 //其他所有數字都出現了兩次。 3 //找出這兩個數字,程式設計實現。a 4 5 //^=單獨兩個數的^結果 6 //單獨出現的兩個數不同位的標記 7 //position: ^結果中第一個出現1的位置 8 //position位