C语⾔实现数组的奇偶排序
今天遇到了个实现数组的奇偶排序的问题,与⼤家分享下解决思路。
思路1:创建新的数组对所求数组进⾏遍历,技术放在⼀起偶数放在⼀起,再⽤穿件数组中的内容替换到所求数组中,代码如下:
#define LEN 10
#include<stdio.h>
冒泡排序代码c语言#include<stdlib.h>
int main()
{
int arr[LEN] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };//数组的初始化
int odd[LEN] = { 0 };//⽤来存储奇数
int dou[LEN] = { 0 };//⽤来存储偶数
int j = 0;
int k = 0;
for (int i = 0; i < LEN; i++)
{
if (arr[i] % 2)
{
odd[j] = arr[i];
j++;
}
else
linux下apache安装{
dou[k] = arr[i];
k++;
}
}
for (int i = 0; i < LEN; i++)//对⽬标数组的更改
formatfactory有用么{
select语句详解if (i <= j)
{
arr[i] = odd[i];
}
else
{
arr[i] = dou[i - j - 1];
}
}
for (int i = 0; i < LEN; i++)
{
printf("%d ", arr[i]);
}
system("pause");
return 0;
}
思路2:如果不允许创建新的空间变量怎么办呢,我们可以⽤冒泡排序的思想来解决这个问题,如果这个数是奇数,我们就把它冒泡的数组顶端,依次冒泡下去,我们就能得到答案,实现代码如下:
#include<stdio.h>
int* doubleline(int *a, int size)//冒泡排序实现奇偶排序所封装的函数
{
int i = 0;哪个表单工具好用
for (i = 0; i < size; i++)//冒泡过程
{
for (int j = 0; j < size - i - 1; j++)
{
if ((*(a + j) % 2)==0)
{
int tmp = *(a + j);
*(a + j) = *(a + j + 1);
*(a + j + 1) = tmp;
}
}
}
return a;
}
int main()//调试过程
{
int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
int size = sizeof(arr) / sizeof(int);//求取数组⼤⼩
int *p = doubleline(arr, size);
for (int i = 0; i < size; i++)
电脑调试器是什么意思{
printf("%d ",*(p+i));
}
system("pause");
return 0;
}
个⼈认为冒泡排序虽然节省了空间,但是如果数组特别⼤的时候这样做的效率是极其低下的,希望运⽤的时候斟酌下。如有什么不⾜之处,希望批评指正。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论