原题:已知数组array[1:n-1]的元素类型为int,设计算法将其调整为左右两部分,左边所有元素为奇数,右边所有元素为偶数,并要求算法的时间复杂度为O(n)。
以下程序自动生成数组,然后调用void adjust()函数进行调整。
#include<stdio.h> #include<time.h> #include<stdlib.h> #define SIZE 10 void adjust(int array[],int n); //调整数组元素的函数声明 void main() { int array[SIZE],i; srand(time(NULL)); //获取随机种子 for(i=0;i<SIZE;i++) //为数组元素赋值,以生成数组 { array[i]=rand()%100+1; } printf("Before adjust array,the array's elements are:\n"); for(i=0;i<SIZE;i++) { printf("%d ",array[i]); } printf("\n"); adjust(array,SIZE); //调用调整数组元素的函数 printf("After adjust array,the array's elements are:\n"); for(i=0;i<SIZE;i++) { printf("%d ",array[i]); } printf("\n"); } void adjust(int array[],int n) //调整数组元素的函数的定义 { int i=0,j=n-1,temp; while(i<j) { while(array[i]%2!=0)i++; while(array[j]%2==0)j--; if(i<j) { temp=array[i]; array[i]=array[j]; array[j]=temp; } } }