数组排序 -- 2015/9/28

来源:互联网 发布:jboss 1099端口 编辑:程序博客网 时间:2024/05/22 06:13

编写一个程序,输入两个包含5个元素的数组,先将两个数组升序排序,然后将这两个数组合并成一个升序数组

<span style="font-size:14px;">////  main.m//  Test0928////  Created by Sara on 15/9/28.//  Copyright (c) 2015年 Sara.Burton. All rights reserved.//#import <Foundation/Foundation.h>void traverse( int *array, int num ) {    for (int i = 0; i < num ; i++) {        printf("%d\t", array[i]);    }    printf("\n");}void sort( int *array, int num ) {    for (int i = num ; i > 0; i--) {        for (int j = 0 ; j < i - 1; j++) {            if (array[j] > array[j + 1]) {                int temp = array[j];                array[j] = array[j + 1];                array[j + 1] = temp;            }        }    }    printf("\n");}int main(int argc, const char * argv[]) {        int a[5] = {0};    int b[5] = {0};    int combine[10] = {0};    printf("输入两个包含5个元素的数组:\n");    printf("a数组:\n");    for (int i = 0; i < 5; i++) {        scanf("%d",&a[i]);    }    printf("b数组:\n");    for (int i = 0; i < 5; i++) {        scanf("%d",&b[i]);    }    /*    for (int i = 5 ; i > 0; i--) {        for (int j = 0 ; j < i - 1; j++) {            if (a[j] > a[j + 1]) {                int temp = a[j];                a[j] = a[j + 1];                a[j + 1] = temp;            }            if (b[j] > b[j + 1]) {                int temp = b[j];                b[j] = b[j + 1];                b[j + 1] = temp;            }        }    }    for (int i = 0; i < 5; i++) {        printf("%d\t", a[i]);    }    printf("\n");    for (int i = 0; i < 5; i++) {        printf("%d\t", b[i]);    }    for (int i = 0 ; i < 10; i++) {        if (i < 5) {            combine[i] = a[i];        } else {            combine[i] = b[i - 5];        }    }    for (int i = 10 ; i > 0; i--) {        for (int j = 0 ; j < i - 1; j++) {            if (combine[j] > combine[j + 1]) {                int temp = combine[j];                combine[j] = combine[j + 1];                combine[j + 1] = temp;            }        }    }    printf("\n");    for (int i = 0; i < 10; i++) {        printf("%d\t", combine[i]);    }    */        sort(a, 5);    traverse(a, 5);    sort(b, 5);    traverse(b, 5);//    for (int i = 0 ; i < 10; i++) {//        if (i < 5) {//            combine[i] = a[i];//        } else {//            combine[i] = b[i - 5];//        }//    }//    sort(combine, 10);        int j = 0;    int k = 0;    for(int i=0;i<10;i++)    {        if(a[j]<=b[k] && j < 5)        {            combine[i]=a[j];            j++;        }        else if(k< 5)        {            combine[i]=b[k];            k++;        }    }    traverse(combine, 10);        return 0;}</span><span style="font-size: 18px;"></span>


注意 : (方法解析)
     文件中有三种方法,其中前两种原理相同,都是现将排序过后的两个的数组重新保存在 combine 数组中,之后对 combine 数组进行冒泡排序.
     不同的是第一种方法是直接通过顺序思维方式写出来的,代码量大,且看起来不容易.
     第二种方法是定义函数,定义了两个函数,一个是遍历函数,一个是排序函数,将main函数中的代码简化,减少代码量,然而,定义函数并不在今天的范围,所以又有了第三种方法.
     在第三种方法中,并没有先将两个数组合并到 combine 中,而是通过比较直接向 combine 数组中填入有序数,此处具体实现如下:
<span style="font-size: 18px;"> </span><span style="font-size:14px;">   int j = 0;    int k = 0;    for(int i = 0;i < 10;i++)    {        if(a[j] <= b[k] && j < 5)        {            combine[i]=a[j];            j++;        }        else if( k < 5)        {            combine[i]=b[k];            k++;        }     }</span>
===>分别用两个数组的第一个数比较,如果a数组的第一个数比b数组的第一个数小,就将 combine[0] = a[0],之后j++, 用 a[1]和 b[0]相比,如果 b[0] < a[1],就combine[1] = b[0],…,另外需要注意的就是数组越界问题,所以在比较大小的同时也要注意是否越界,如果越界,在赋值时就会出错.使 combine[5] 的值为 0;


0 0
原创粉丝点击