中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

數組元素的分類

發布時間: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

涡阳县| 福清市| 滦平县| 柏乡县| 华池县| 花莲市| 天峻县| 靖远县| 满洲里市| 民丰县| 靖边县| 漳平市| 清水县| 长垣县| 巴马| 社旗县| 申扎县| 彩票| 公安县| 香格里拉县| 固镇县| 梁河县| 犍为县| 永胜县| 广汉市| 治县。| 锡林郭勒盟| 融水| 县级市| 淮阳县| 荥经县| 遂平县| 延安市| 车致| 青川县| 金堂县| 阳曲县| 鹤庆县| 文化| 雅安市| 馆陶县|