设一系列正整数存放在一个数组中,试设计算法,将所有奇数存放在数组的前半部分.(利用C语言)
来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/12 03:56:12
设一系列正整数存放在一个数组中,试设计算法,将所有奇数存放在数组的前半部分.(利用C语言)
设一系列正整数存放在一个数组中,试设计算法,将所有奇数存放在数组的前半部分,将所有的偶数存放在数组的后半部分.要求尽可能的少用临时单元并使用时间少.(利用C语言)
设一系列正整数存放在一个数组中,试设计算法,将所有奇数存放在数组的前半部分,将所有的偶数存放在数组的后半部分.要求尽可能的少用临时单元并使用时间少.(利用C语言)
/*
\x09i从a的首部往后移动,j从a的尾部往前移动,若a[i]为偶数且a[j]为奇数,则交换,否则根据情况移动i或j.
\x09时间复杂度:length(a).
\x09空间复杂度:数组a.
\x09个人认为这是时空效率最好的,其他网友不服来辩.
*/
#include <iostream>
using namespace std;
const int n = 10;
int main()
{
\x09int a[n] = {3,18,2,12,12,5,6,7,8,9};
\x09int i = 0;
\x09int j = n;
\x09while (i < j)
\x09{
\x09\x09if (0 == a[i] % 2 && 1 == a[j] % 2)
\x09\x09{
\x09\x09\x09swap(a[i],a[j]);\x09//a[i] = a[i] ^ a[j]; a[j] = a[i] ^ a[j]; a[i] = a[i] ^ a[j];
\x09\x09\x09i++;
\x09\x09\x09j--;
\x09\x09\x09continue;
\x09\x09}
\x09\x09if (1 == a[i] % 2)
\x09\x09{
\x09\x09\x09i++;
\x09\x09}
\x09\x09if (0 == a[j] % 2)
\x09\x09{
\x09\x09\x09j--;
\x09\x09}
\x09}
\x09for (i = 0; i < n; i++)
\x09{
\x09\x09cout <<a[i] <<" ";
\x09}
\x09cout <<endl;
\x09return 0;
}
(如有任何疑问请追问,我一直在线)
再问: 改成C语言行吗?
再答: #include <stdio.h>\x09\x09//c语言标准输入输出头文件
#define n 10\x09\x09\x09//宏定义,数组的大小
void main()
{
int a[n] = {3,18,2,12,12,5,6,7,8,9};\x09//初始化数组
int i = 0;
int j = n;
while (i < j)
{
if (0 == a[i] % 2 && 1 == a[j] % 2)\x09//如果数组左边是偶数,右边是奇数
{
//swap(a[i],a[j]);
\x09\x09\x09
\x09\x09\x09/*交换两个数,这是最好的交换算法*/
\x09\x09\x09a[i] = a[i] ^ a[j];
\x09\x09\x09a[j] = a[i] ^ a[j];
\x09\x09\x09a[i] = a[i] ^ a[j];
i++;
j--;
continue;\x09\x09\x09//交换之后后面的就不用执行了
}
\x09\x09/*不符合交换条件那就i接着往后移动,j接着往前移动*/
if (1 == a[i] % 2)\x09\x09
{
i++;
}
if (0 == a[j] % 2)
{
j--;
}
}
\x09/*输出*/
for (i = 0; i < n; i++)
{
\x09\x09printf("%d ",a[i]);
}
printf("\n");
}(如有任何疑问请追问,我一直在线)
\x09i从a的首部往后移动,j从a的尾部往前移动,若a[i]为偶数且a[j]为奇数,则交换,否则根据情况移动i或j.
\x09时间复杂度:length(a).
\x09空间复杂度:数组a.
\x09个人认为这是时空效率最好的,其他网友不服来辩.
*/
#include <iostream>
using namespace std;
const int n = 10;
int main()
{
\x09int a[n] = {3,18,2,12,12,5,6,7,8,9};
\x09int i = 0;
\x09int j = n;
\x09while (i < j)
\x09{
\x09\x09if (0 == a[i] % 2 && 1 == a[j] % 2)
\x09\x09{
\x09\x09\x09swap(a[i],a[j]);\x09//a[i] = a[i] ^ a[j]; a[j] = a[i] ^ a[j]; a[i] = a[i] ^ a[j];
\x09\x09\x09i++;
\x09\x09\x09j--;
\x09\x09\x09continue;
\x09\x09}
\x09\x09if (1 == a[i] % 2)
\x09\x09{
\x09\x09\x09i++;
\x09\x09}
\x09\x09if (0 == a[j] % 2)
\x09\x09{
\x09\x09\x09j--;
\x09\x09}
\x09}
\x09for (i = 0; i < n; i++)
\x09{
\x09\x09cout <<a[i] <<" ";
\x09}
\x09cout <<endl;
\x09return 0;
}
(如有任何疑问请追问,我一直在线)
再问: 改成C语言行吗?
再答: #include <stdio.h>\x09\x09//c语言标准输入输出头文件
#define n 10\x09\x09\x09//宏定义,数组的大小
void main()
{
int a[n] = {3,18,2,12,12,5,6,7,8,9};\x09//初始化数组
int i = 0;
int j = n;
while (i < j)
{
if (0 == a[i] % 2 && 1 == a[j] % 2)\x09//如果数组左边是偶数,右边是奇数
{
//swap(a[i],a[j]);
\x09\x09\x09
\x09\x09\x09/*交换两个数,这是最好的交换算法*/
\x09\x09\x09a[i] = a[i] ^ a[j];
\x09\x09\x09a[j] = a[i] ^ a[j];
\x09\x09\x09a[i] = a[i] ^ a[j];
i++;
j--;
continue;\x09\x09\x09//交换之后后面的就不用执行了
}
\x09\x09/*不符合交换条件那就i接着往后移动,j接着往前移动*/
if (1 == a[i] % 2)\x09\x09
{
i++;
}
if (0 == a[j] % 2)
{
j--;
}
}
\x09/*输出*/
for (i = 0; i < n; i++)
{
\x09\x09printf("%d ",a[i]);
}
printf("\n");
}(如有任何疑问请追问,我一直在线)
设一系列正整数存放在一个数组中,试设计算法,将所有奇数存放在数组的前半部分.(利用C语言)
C语言编程:假设数组a中已经存放20个整数,编写程序,将其中所有偶数存放在数组b中,将所有奇数存放在c组中
C语言:从键盘输入10个数存放在数组a中,再将数组a中的偶数存放在数组b中
C语言:求出a中各相邻两个元素的和,并将这些和存放在数组 b中
VB随机产生10个任意的两位正整数存放在一维数组中,求数组的最大值、平均值、能实现将数据升序排列,并且
C语言:在score数组存放有m个成绩,在函数fun中计算平均分,再将低于平均分的人数作为函数值返回,
C语言 随机产生64个100-999范围内的整数,存放在8*8的数组中 急
2,输入5个不同的单词,将其存放在二维字符数组中,每行存放一个单词.利用选择法按字典顺序对英文单词进行排序,最后输出结果
C语言编程随机产生10个10到50的正整数存放到数组中,并求数组中的所以元素最大值、最小值、平均值及各元素
从键盘输入n个整数并放到数组x中,编写一个函数,将数组x中的元素颠倒顺序后仍然存放在愿数组中.
C语言 定义一个二维数组来存放一个矩阵,然后将矩阵转置输出
C 语言 一维整形数组将数组元素逆序存放并把交换后的数组输出 要求数组元素的输入,交换和输出分别用函数