第一个赔率和最后一个赔率 [英] odds to the first and evens last
本文介绍了第一个赔率和最后一个赔率的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试解决类似...的问题
在数组中,我们必须将所有奇数元素移到开始...,甚至将偶数元素移到末尾...
我尝试过这种方式,但即使在这里失去秩序...有人可以帮助我吗?
我得到的输出是... 1 3 5 7 9 4 8 2 6
期待就地线性时间解决方案...
I am trying to solve a problem like ...
in an array we have to move all the odd elements to the start ...and even elements to the end ...
i tried this way but evens lose order here ...can someone help me ???????
the output i get is ...1 3 5 7 9 4 8 2 6
expecting an linear time in place solution ...
#include<stdio.h>
void swap(int *p,int *q)
{
*p=*p^*q;
*q=*p^*q;
*p=*p^*q;
}
int main()
{
int arr[]={ 2, 1 ,4 ,3 ,6 ,5 ,8 ,7 ,9};
int odd=0;
int even=0;
int arr_size = sizeof(arr)/sizeof(arr[0]);
while(even< arr_size){
if(arr[even]&1)
swap(&arr[odd++],&arr[even++]);
else
even++;
}
int i=0;
for(i=0;i<arr_size ;i++)
printf("%d ",arr[i]);
return 0;
}
推荐答案
此解决方案如何
#include<stdio.h>
int main()
{
int i;
int arr[]={ 2, 1 ,4 ,3 ,6 ,5 ,8 ,7 ,9};
int arr_size = sizeof(arr)/sizeof(arr[0]);
int sorted[arr_size];
int sp = 0;
for(i=0;i<arr_size;i++){
if(arr[i]&1){
sorted[sp++]=arr[i];
}
}
for(i=0;i<arr_size;i++){
if(!(arr[i]&1)){
sorted[sp++]=arr[i];
}
}
for(i=0;i< arr_size ;i++)
printf("%d ", sorted[i]);
return 0;
}
输出为
1 3 5 7 9 2 4 6 8
**更新**
以上内容使用了更多空间并在列表上运行了两次,而以下内容仅在列表中运行了一次,但仍使用了更多空间
while the above uses more space and runs over the list twice, the following runs over the list only once, but still use more space
int main(){
int i;
int arr[]={ 2, 1 ,4 ,3 ,6 ,5 ,8 ,7 ,9};
int arr_size = sizeof(arr)/sizeof(arr[0]);
int sorted[arr_size];
int even = 1+arr_size/2;
int odd = 0;
for(i=0;i<arr_size;i++){
if(arr[i]&1)
sorted[odd++]=arr[i];
else
sorted[even++]=arr[i];
}
for(i=0;i< arr_size ;i++)
printf("%d ", sorted[i]);
return 0;
}
这篇关于第一个赔率和最后一个赔率的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文