数据结构 排序(冒泡排序升级版)

//排序--冒泡排序法升级版
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>

/*
冒泡排序:
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较相邻的两个元素,如果他们的顺序错误就把他们交换过来。
走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。

*/

//冒泡法排序
void BubbleSort(int * arr, int num){
    if (arr == NULL)
    {
        printf("传入参数不可以为空!\n");
        return;
    }
    int i = 0, j = 0, exchange = 1, temp = 0;
    /*
      升级版的精华所在,增加exchange变量
      普通的冒泡排序需要遍历n轮,但是有可能n-1轮时候就已经排序完成了(部分数据本来有序),但是程序仍然会执行

      升级版增加exchange变量,当判断在一轮排序中,任何2个元素都没有交换位置 说明该数组已经有序
    */
    for (i = 0; i < num&& exchange; i++)
    {
        exchange = 0;
        for (j = 0; (j<num - i - 1) ; j++)
        {
            if (arr[j]>arr[j+1])
            {
                //交换位置
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
                exchange = 1;
            }
        }
    }
}

//打印数组
void Print(int * arr, int num){
    if (arr == NULL)
    {
        printf("传入参数不可以为空!\n");
        return;
    }
    int i = 0;
    for (int i = 0; i < num; i++)
    {
        printf("%5d", *(arr + i));
    }
    printf("\n");
}

void Test(){
    int i = 0;
    int arr[10] = { 0 };
    //定义时间类型变量
    time_t ts;
    //生成随机数种子
    srand((unsigned int)time(&ts));
    for (i = 0; i < 10; i++)
    {
        arr[i] = (int)(rand() % 100);
    }
    //打印数组
    printf("\n原始数据----\n");
    Print(arr, 10);
    //冒泡法排序
    printf("冒泡法排序之后的数据\n");
    BubbleSort(arr, 10);
    Print(arr, 10);
}

void main(){
    Test();
    system("pause");
}

posted on 2016-08-05 14:45  寒魔影  阅读(739)  评论(0编辑  收藏  举报

导航