91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

數組元素的分類

發布時間:2020-07-29 18:37:46 來源:網絡 閱讀:405 作者:Sekai_Z 欄目:編程語言

題目:

調整數組順序使奇數位于偶數前面

輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有奇數位于數組的前半部分,所有偶數位于數組的后半部分

程序1.0:

使用兩個指針一個指向頭一個指向尾,如果頭指針遇到奇數就后移,遇到偶數就和尾指針指向的元素交換,頭指針交換完成后后移,尾指針交換完成后前移,當兩指針指向同一地址交換結束

void ReorderOddEven(int *pData, size_t length)
{
	assert(pData);
	assert(length);
	int*pHead = pData;
	int*pTail = pData + length - 1;
	while (pHead != pTail)
	{
		if ((*pHead & 0x1) == 0)//為偶數
		{
			swap(*pHead, *pTail);
			pTail--;
		}
		pHead++;
	}
}

程序1.1

void ReorderOddEven(int *pData, size_t length)
{
	assert(pData);
	assert(length);

	int *pHead = pData;
	int*pTail = pData + length - 1;

	while (pHead < pTail);
	{
		while (((*pHead & 0x1) != 0) && (pHead < pTail))//前面數若為奇數
		{
			pHead++;
		}
		while (((*pHead & 0x1) == 0) && (pHead < pTail))//若后面的數為偶數
		{
			pTail--;
		}
		if (pHead < pTail)
		{
			swap(*pHead, *pTail);
		}
	}
}

程序2.0

若要把題目改為:將正數放到負數前面或者改為將能被三整除的數放到不能被三整數的數的前面只需要將while里的循環條件改一下就可以

但是,若想要一個通用的模板呢?(即不要改變函數,只改變判斷條件)

void ReorderOddEven(int *pData, size_t length, bool(*func)(int))
{
	assert(pData);
	assert(length);

	Reorder(pData, length, isEven);
}
void Reorder(int *pData, size_t length, bool(*func)(int))
{
	int *pHead = pData;
	int*pTail = pData + length - 1;

	while (pHead < pTail);
	{
		while (((*pHead & 0x1) != 0) && !func(*pHead))//前面數若為奇數
		{
			pHead++;
		}
		while (((*pHead & 0x1) == 0) && func(*pTail))//若后面的數為偶數
		{
			pTail--;
		}
		if (pHead < pTail)
		{
			swap(*pHead, *pTail);
		}
	}
}
bool isEven(int n)
{
	return (n & 0x1) == 0;
}

    這樣,就可以通過改變函數isEven的內容來改變整體函數的條件,增加了函數的可移植性和健壯性


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c
AI

百色市| 镇坪县| 珠海市| 门源| 碌曲县| 左权县| 义乌市| 娱乐| 都匀市| 茶陵县| 镇江市| 定日县| 诸城市| 土默特右旗| 招远市| 噶尔县| 昔阳县| 焦作市| 吉首市| 巴里| 雷州市| 霍城县| 台安县| 泌阳县| 宜阳县| 泉州市| 嵊泗县| 晋城| 巩留县| 鲁甸县| 弋阳县| 吴江市| 本溪| 轮台县| 增城市| 吉林市| 吴桥县| 麟游县| 宜阳县| 托里县| 旌德县|