c语言分段排序 输入整型数组,偶数在前,奇数在后

 我来答
碧海风云

2017-12-13 · 碧海风的秘密小据点!
碧海风云
采纳数:909 获赞数:10281

向TA提问 私信TA
展开全部
#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;
}

注:运行结果略去输入数组部分

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式