(C语言)输入若干自然数,对偶数从小到大排序,对奇数从大到小排序,分别输出排序后的结果。

#include<stdio.h>
void sort(int a[],int n,int flag)
{
	int i,j,k,t;
	for(i = 0;i < n-1;i ++)
	{
		k = i;
		for(j = i + 1;j < n;j ++)
		{
			if (flag)
			{
				if(a[k] > a[j])
					k = j;	
			}
			else{
				if(a[k] < a[j])
					k= j;
			}	
		}
		if(k != i)
		{
			t = a[i];
			a[i] = a[k];
			a[k] = t;
		}
	}
	for(i = 0;i < n;i ++)
	{
		if(flag)
			printf("%d ",a[i]);
		else 
			printf("%d ",a[i]);
	}
	printf("\n");
}
int main()
{
	int a[100],b[100];
	int i = 0,j = 0,k;
	int t = -1;
	while(1)
	{
		scanf("%d",&t);
		if(t == -1) //以-1为输入时的结束标志
			break;
		if(t % 2)
		{
			a[i] = t;
			i ++;
		}
		else
		{
			b[j] = t;
			j ++;
		}
	}
	sort(a,i,0);
	sort(b,j,1);
	return 0;
}

运行代码截图:

注:侵权可删 

### 回答1: 可以使用冒泡排序的思想来实现整偶数排序。具体步骤如下: 1. 定义一个整型组,存储待排序的整。 2. 使用双重循环,外层循环控制排序的轮,内层循环控制每轮比较的次。 3. 在内层循环中,比较相邻的两个,如果前一个偶数,后一个奇数,则交换它们的位置。 4. 在内层循环中,比较相邻的两个,如果前一个和后一个都是奇数,且前一个比后一个小,则交换它们的位置。 5. 在内层循环中,比较相邻的两个,如果前一个和后一个都是偶数,且前一个比后一个大,则交换它们的位置。 6. 最后输出排序后的整组。 下面是具体的代码实现: ```c #include <stdio.h> void sort(int arr[], int len) { int i, j, temp; for (i = 0; i < len - 1; i++) { for (j = 0; j < len - 1 - i; j++) { if ((arr[j] % 2 == 0) && (arr[j + 1] % 2 == 1)) { // 前一个偶数,后一个奇数 temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } if ((arr[j] % 2 == 1) && (arr[j + 1] % 2 == 1)) { // 前一个和后一个都是奇数 if (arr[j] < arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } if ((arr[j] % 2 == 0) && (arr[j + 1] % 2 == 0)) { // 前一个和后一个都是偶数 if (arr[j] > arr[j + 1]) { temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } } } int main() { int arr[] = { 3, 5, 2, 4, 1, 6 }; int len = sizeof(arr) / sizeof(arr[0]); sort(arr, len); for (int i = 0; i < len; i++) { printf("%d ", arr[i]); } printf("\n"); return 0; } ``` 输出结果为:5 3 1 2 4 6 ### 回答2: C语言偶数排序是一个经典的算法,计算机编程中常会用到,主要思路是通过遍历整型组,先将所有的奇数按降序排列,再将所有偶数按升序排列,最后将两部分拼接起来即可得到所需结果。 具体实现方法如下: 1. 定义一个组来存储要排序的整; 2. 然后分别对奇数偶数进行排序,可以使用冒泡排序、快速排序算法; 3. 对奇数排序时,先遍历组,将所有奇数取出来,放入一个新的组中,然后对该组进行降序排序; 4. 对偶数排序时,同样遍历组,将所有偶数取出来放入新组中,然后对该组进行升序排序; 5. 最后,将排序完成的奇数组和偶数组拼接在一起,即可得到所需结果。 具体实现方式如下: void sort(int array[], int len) { int i, j, tmp; //先将所有奇数按降序排列 for (i = 0; i < len - 1; i++) { for (j = i + 1; j < len; j++) { if (array[j] % 2 == 1 && array[i] < array[j]) { tmp = array[i]; array[i] = array[j]; array[j] = tmp; } } } //再将偶数按升序排列 for (i = len - 1; i > 0; i--) { for (j = 0; j < i; j++) { if (array[j] % 2 == 0 && array[j] > array[j + 1]) { tmp = array[j]; array[j] = array[j + 1]; array[j + 1] = tmp; } } } } 上述代码实现了将整组按照奇偶性进行排序,分别对奇数偶数排序,并且奇数按照降序排列,偶数按照升序排列。可以根据实际情况进行调整,如奇数按照升序排列,偶数按照降序排列等。 ### 回答3: 该问题可以按照如下步骤解决: 1. 首先开辟两个组,一个用于存放奇数,另一个用于存放偶数。 2. 遍历整个组,将奇数存放在奇数组中,将偶数存放在偶数组中。 3. 分别对奇数组和偶数进行排序,使得奇数从大到小排列,偶数从小到大排列。 4. 将排序后的奇数组和偶数组合并成一个新的组,即可得到所需的排序结果。 下面是一个c语言实现的示例代码: void sort(int arr[], int n) { int odd[n], even[n]; int oddIndex = 0, evenIndex = 0; // 将奇数偶数分别存放到两个组中 for (int i = 0; i < n; i++) { if (arr[i] % 2 != 0) { odd[oddIndex++] = arr[i]; } else { even[evenIndex++] = arr[i]; } } // 对奇数从大到排序 for (int i = 0; i < oddIndex; i++) { for (int j = i + 1; j < oddIndex; j++) { if (odd[i] < odd[j]) { int tmp = odd[i]; odd[i] = odd[j]; odd[j] = tmp; } } } // 对偶数从小到大排序 for (int i = 0; i < evenIndex; i++) { for (int j = i + 1; j < evenIndex; j++) { if (even[i] > even[j]) { int tmp = even[i]; even[i] = even[j]; even[j] = tmp; } } } // 将奇数偶数合并到一个组中 int index = 0; for (int i = 0; i < oddIndex; i++) { arr[index++] = odd[i]; } for (int i = 0; i < evenIndex; i++) { arr[index++] = even[i]; } } 该代码中,首先将原组中的奇数偶数分别存放到两个组中。然后对奇数组和偶数进行排序,最后将排序后的结果合并到一个新的组中,即可得到所需的排序结果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值