c语言分段排序 输入整型数组,偶数在前,奇数在后
1个回答
展开全部
#include <stdio.h>
#include <conio.h>
#define LEN 100 /*数组长度上限*/
#define elemType int /*元素类型*/
/*输入数组*/
void inputArr (elemType arr[], int len) {
int i;
for (i=0; i<len; i++)
scanf ("%d",&arr[i]);
putchar ('\n');
}
/*升序冒泡排序*/
/*参数说明:*/
/*int arr[]:排序目标数组*/
/*int len:元素个数*/
void bubbleSortAsc (elemType arr[], int len) {
elemType temp;
int i, j;
for (i=0; i<len-1; i++) /*外循环控制排序趟数,len-1个数进行len-1趟*/
for (j=0;j<len-1-i; j++) { /*内循环每趟比较的次数,第j趟比较len-j次*/
if (arr[j] > arr[j+1]) { /*相邻元素比较,逆序则交换*/
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
/*打印数组*/
void printArr (elemType arr[], int len) {
int i;
for (i=0; i<len; i++)
printf ("%d\t",arr[i]);
putchar ('\n');
}
int main (void) {
elemType arr[LEN];
elemType arrOdd[LEN], arrEven[LEN]; /*存储奇数、偶数*/
int len, oddLen, evenLen;
int i, j ,k;
printf ("请输入数组长度:");
scanf ("%d",&len);
printf ("请输入数组内容:\n");
inputArr (arr, len);
/*先分奇偶,后分别排序,最终合并*/
for (i=0, j=0, k=0; i<len; i++) {
if (arr[i]%2) {
arrOdd[j] = arr[i];
j++;
}
else {
arrEven[k] = arr[i];
k++;
}
}
oddLen = j;
evenLen = k;
bubbleSortAsc (arrOdd, oddLen);
bubbleSortAsc (arrEven, evenLen);
for (k=0, i=0; k<evenLen; k++, i++)
arr[i] = arrEven[k];
for (j=0; j<oddLen; j++, i++)
arr[i] = arrOdd[j];
printArr (arr,len);
putchar ('\n');
getch (); /*屏幕暂留*/
free (arr);
return 0;
}
注:运行结果略去输入数组部分
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询