(一)数组中奇数元素在前,偶数在后,并各自从小到大排序

    技术2025-03-01  10

    目录

    一、规则

    二、代码

    三、测试


    一、规则

     

    使数组中所有奇数放到偶数前面,并且奇数部分从小到大排序,偶数部分从小到大排序

    输入规则:

           第一行:输入一个整数,代表数组中的元素个数

           第二行:输入数据

    输出:

           所有奇数在前,偶数在后并且奇数部分从小到大排序,偶数部分从小到大排序

    样例:

          输入:

                5             1 2 3 4 5

          输出:

                1  3  5  2  4  

    思路:

         1.使用双指针分别从数组头和数组尾遍历,当头指针指向偶数,尾指针指向奇数,进行元素交换

         2.如果头指针所指是奇数,头指针向右移动

         3.如果尾指针所指是偶数,尾指针向左移动

         4.在交换完毕后分别对奇数和偶数部分进行排序

     

    二、代码

    #include<iostream> #include<algorithm> using namespace std; 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 < pEnd && !func(*pBegin)) pBegin++; while(pBegin < pEnd && func(*pEnd)) pEnd--; if(pBegin < pEnd) { int temp = *pBegin; *pBegin = *pEnd; *pEnd = temp; } } sort(pData,pEnd); sort(pBegin,pData+length); } bool isEven(int n) { return (n & 1) == 0 ; //判断是否是偶数,是偶数返回True } void ReorderOddEven(int *pData,unsigned int length) { Reorder(pData,length,isEven); } int main() { int array_length,array_element; cin>>array_length; int * array = new int[array_length]; for(int i = 0;i < array_length;i++) { cin>>array_element; array[i]=array_element; } ReorderOddEven(array,array_length); cout<<endl; for(int i = 0;i < array_length;i++) { cout<<array[i]<<" "; } delete [] array; return 0; }

     

    三、测试

    测试①

    5 1 2 3 4 5 1 3 5 2 4 -------------------------------- 请按任意键继续. . .

    测试②

    4 22 11 6 7 7 11 6 22 -------------------------------- 请按任意键继续. . .

     

     

    Processed: 0.008, SQL: 9