奇数到奇数位偶数到偶数位

int A【10】;
奇数到奇数位偶数到偶数位,(奇数位从小到大排序),(偶数位从大到小排序),如有相同数值应跳过
数组是随机的,最大值不超过6

“如有相同数值应跳过” 这个是什么意思?

简单的办法用另一个空数组来装,分别定义两个 奇数和偶数 的下标,一次遍历原数组;
复杂一点就原数组上移动

img

看一下,随机生成的数。奇数位从小到大排序),(偶数位从大到小排序),如有相同数值应跳过
数组是随机的,最大值不超过6




 
#include<stdio.h>
#include <time.h>
#include <stdlib.h>
int main(){
int i,j=0,https://img-mid.csdnimg.cn/release/static/image/mid/ask/519759648256183.png "#left")
k=0,n,a[99],b[99],c[99],j1,j2,temp1,temp2;
   
    for(int i = 0 ; i < 6 ; i ++)
    {
        a[i] = rand() % 6 + 1;
        int ok = 1 ;
        for(int j = 0 ; j < i ; j ++) 
        {
            if(a[i] == a[j])
            {
                i--;
                ok = 0;
                break;
            }
            
        }
        if(ok == 0) continue;
        printf("%d\n",a[i]);
    }


    for(i=0;i<6;i++){//先用一个for循环把奇数和偶数分别存储在数组c和b里 
        if(a[i]%2==1){
            b[j]=a[i];
            j++;
        }
        else {
        c[k]=a[i];//本题不再具体讲述插入排序法 ,有兴趣可翻开我之前笔记 
        k++;
             
        } 
    }
    for(i=1;i<k;i++){
        temp1=c[i];
        j1=i-1;
        while(c[j1]<temp1&&j1>=0)//再使用插入排序法,奇数从大到小 c[j1]<temp1&&j1>=0 
        { c[j1+1]=c[j1];
           j1--;  
            
        }
        c[j1+1]=temp1;
    }
    for(i=0;i<k;i++)
    {
        printf("%d ",c[i]);//排完顺序输出
    }
    for(i=1;i<j;i++)
    {
        temp2=b[i];
        j2=i-1;
        while(b[j2]>temp2&&j2>=0)//再使用插入排序法,奇数从大到小 b[j2]>temp2&&j2>=0 
        {
            b[j2+1]=b[j2];
            j2--;
        }
        b[j2+1]=temp2;
    }
    for(i=0;i<j;i++)
    {
            printf("%d ",b[i]);//排完顺序输出
    }
 
}

1.先判断原数组中的重复数,有就去掉;这一个得到一个新数组A1;
2.定义一个奇数列,一个偶数列,将A1中的数按奇偶放到奇数列和偶数列中;
3.奇数列排序,偶数列排序;(需要保证数列长度一致或差1,否则就会出错)
4.按奇偶数列交替取数的规则,产生新数列,得到结果

参考下面,先对数组排序,


#include<iostream>
#include <hash_map>
#include <algorithm>
using namespace std;
//改变数组,令其奇数位置存储奇数,偶数位置存储偶数
//要求空间复杂度为O(1),时间复杂度为O(n)
int a[]={9,6,5,4,3,2,1,8};
void ChangeArray(int len)
{
   int end=a[len-1];
   int even=0;
   int odd=1;
   while(even<len&&odd<len)
   {
     if(a[len-1]%2==0)
         {
     std::swap(a[len-1],even);
     even+=2;
     }
     else
     {
         std::swap(a[len-1],odd);
         odd+=2;
     } 
  }
 
}
 
int main()
{
    ChangeArray(8);
  return 0;
}

是要在这一个数组中完成换位以及排序吗