码迷,mamicode.com
首页 > 编程语言 > 详细

对数组的简单操作和排序 第4次讨论主题(for WJ)

时间:2015-04-08 09:03:03      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:

(课堂已布置的作业)将整型数组num[N]定义为外部的、用六个函数:

  1. void main(void);
  2. 冒泡函数void bubble_sort(void);
  3. 选择排序一函数void select_sort1(void);
  4. 选择排序二函数void select_sort2(void);
  5. 随机数初始化数组函数void init(void);//随机种子、每个数小于55
  6. 打印输出函数void prt(void);//每行打12个

处理num[N]数组排降序

 

7.编写另一函数  ??? del(int);从排好降序的num[N]整型数组中删除从首至尾第一次出现的某数(在main中从键盘输入),若删除成功、余下数仍连续保持降序、置首数为55

8.初始化外部数组num[N]、编写另一函数

void odd_even(void)实现将数组元素奇数排列在前、偶数排列在后。(不允许定义其它数组辅助操作)

 

函数的构建:

     1、初始化数组num

技术分享
void Init()//初始化num,随机产生0—55的数据
{
    
    int i;    
    
    srand((unsigned)time(NULL));
    
    for(i=0;i<MAXN;i++)
    {
    
    num[i]=rand()%56;//随机数在0—55中产生
        
    }
    
}
随机产生数组num

     2、冒泡排序

技术分享
void Bublle_Sort()//冒泡排序(降序)
{
    
    int i,j,temp;
    
    for(i=0;i<MAXN-1;i++)
    {
        
        for(j=0;j<MAXN-i-1;j++)
        {
            
            if(num[j]<num[j+1])
            {
                
                temp=num[j];
                num[j]=num[j+1];
                num[j+1]=temp;
                
            }
            
        }
        
    }
    
}
Bublle_Sort()

3、选择排序1:

技术分享
void select_sort1()//选择排序(降序)
{
    
    int i,j,k,temp;
    
    for(i=0;i<MAXN-1;i++)
    {
        
        k=i;
        
        for(j=i+1;j<MAXN;j++)
        {
            
            if(num[j]>num[k]) k=j;//选择出第i大的数,与num[i]交换位置
            
        }
        
        if(k!=i)
        {
            
            temp=num[k];
            num[k]=num[i];
            num[i]=temp;
            
        }
        
    }
    
}
select_sort1()

4、选择排序2

技术分享
void select_sort2()//选择排序2(降序)
{
    
    int i,j,k,temp;
    
    for(i=0;i<MAXN-1;i++)
    {
        
        k=i;
        
        for(j=i+1;j<MAXN;j++)
        {
            
            if(num[j]>num[k]) {
            
            temp=num[k];
            num[k]=num[j];
            num[j]=temp;
            
            }
            
        }
        
    }
    
}
select_sort2()

5、输出排序

技术分享
void prt()//每行打12个,处理num[N]数组排降序!
{

    int i;

    select_sort2();

    for(i=0;i<MAXN;i++)
    {
        
        if(i%12==11||i==MAXN-1) printf("%2d\n",num[i]);
        else printf("%2d ",num[i]);
    }

}
prt()

6、把数组第i个数置为55

技术分享
void del(int x)
{

    int i;

    for(i=0;i<MAXN;i++)
    {

        if(x==num[i])
        {

            num[i]=55;

            return ;
        }

    }

    printf("删除失败!\n");

}
del(int x)

7、奇数在前,偶数在后

技术分享
void odd_even()//实现将数组元素奇数排列在前、偶数排列在后。
{

    int i,j,temp;

    for(i=0;i<MAXN-1;i++)//类似选择排序
    {

        if(num[i]%2) continue;

        for(j=i+1;j<MAXN;j++)
        {
            
            if(num[j]%2)
            {

                temp=num[i];
                num[i]=num[j];
                num[j]=temp;

                continue;
            }
    
        }

        break;
    
    }

}
odd_even()

 

8、完整代码:

 

#include<stdio.h>
#include<stdlib.h>//随机函数的头文件(rand())
#include<time.h>//时间函数的头文件(srand((unsigned)time(NULL)))辅助产生随机数

#define MAXN 100

int num[MAXN];

void Init()//初始化num,随机产生0—55的数据
{
    
    int i;    
    
    srand((unsigned)time(NULL));
    
    for(i=0;i<MAXN;i++)
    {
    
    num[i]=rand()%56;//随机数在0—55中产生
        
    }
    
}

void Bublle_Sort()//冒泡排序(降序)
{
    
    int i,j,temp;
    
    for(i=0;i<MAXN-1;i++)
    {
        
        for(j=0;j<MAXN-i-1;j++)
        {
            
            if(num[j]<num[j+1])
            {
                
                temp=num[j];
                num[j]=num[j+1];
                num[j+1]=temp;
                
            }
            
        }
        
    }
    
}

void select_sort1()//选择排序2(降序)
{
    
    int i,j,k,temp;
    
    for(i=0;i<MAXN-1;i++)
    {
        
        k=i;
        
        for(j=i+1;j<MAXN;j++)
        {
            
            if(num[j]>num[k]) k=j;//选择出第i大的数,与num[i]交换位置
            
        }
        
        if(k!=i)
        {
            
            temp=num[k];
            num[k]=num[i];
            num[i]=temp;
            
        }
        
    }
    
}


void select_sort2()//选择排序2(降序)
{
    
    int i,j,k,temp;
    
    for(i=0;i<MAXN-1;i++)
    {
        
        k=i;
        
        for(j=i+1;j<MAXN;j++)
        {
            
            if(num[j]>num[k]) {
            
            temp=num[k];
            num[k]=num[j];
            num[j]=temp;
            
            }
            
        }
        
    }
    
}

void print()
{

    int i;
    for(i=0;i<MAXN;i++)
    {
        
        if(i%12==11||i==MAXN-1) printf("%2d\n",num[i]);
        else printf("%2d ",num[i]);
    }
}

void prt()//每行打12个,处理num[N]数组排降序!
{
    select_sort2();

    print();

}

void del(int x)
{

    int i;

    for(i=0;i<MAXN;i++)
    {

        if(x==num[i])
        {

            num[i]=55;

            return ;
        }

    }

    printf("删除失败!\n");

}

void odd_even()//实现将数组元素奇数排列在前、偶数排列在后。
{

    int i,j,temp;

    for(i=0;i<MAXN-1;i++)//类似选择排序
    {

        if(num[i]%2) continue;

        for(j=i+1;j<MAXN;j++)
        {
            
            if(num[j]%2)
            {

                temp=num[i];
                num[i]=num[j];
                num[j]=temp;

                continue;
            }
    
        }

        break;
    
    }

}

void main()
{

    int i;
    
    Init();
    printf("初始化num数组:\n");
    print();

    printf("\nprt()函数的效果\n");
    prt();

    Init();
    select_sort1();
    printf("\n选择排序1:\n");
    print();
    
    Init();
    select_sort2();
    printf("\n选择排序2:\n");
    print();

    Init();
    Bublle_Sort();
    printf("\n冒泡排序:\n");
    print();

    del(31);
    printf("\n删除第一个31并置为55:\n");
    print();

    Init();
    odd_even();
    printf("\n将奇数置于头,偶数置于尾:\n");
    print();
    
}

实现效果:
技术分享

技术分享

技术分享

 

对数组的简单操作和排序 第4次讨论主题(for WJ)

标签:

原文地址:http://www.cnblogs.com/yanglingwell/p/4401441.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!