冒泡排序

参考链接:冒泡排序

参考链接:冒泡排序的2种写法

1、比较相邻的元素。如果第一个比第二个大(小),就交换他们两个。

2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大(小)的数。

3、针对所有的元素重复以上的步骤,除了最后已经选出的元素(有序)。

4、持续每次对越来越少的元素(无序元素)重复上面的步骤,直到没有任何一对数字需要比较,则序列最终有序。

有以下代码

#include "stdafx.h"

//数组下标小的往后挪
void bubble_sort_0(int arr[], int i_arrNum)
{
    int i_temp;
    for (int i = 0; i < i_arrNum - 1; i++)
    {//整个数组需要排序 num - 1 次
        for(int j = 0; j <  i_arrNum - 1 - i; j++)
        {//把最小的这个数挪到数组最后需要的最大次数是 num - 1,已经排过序的数不用再管 num - i
            if(arr[j] < arr[j + 1])//  arr[j] > arr[j+1]大数往后  //  arr[j] < arr[j+1]小数往后
            {  
                i_temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = i_temp;
            }
        }
        for (int a = 0; a < i_arrNum; a++)
        {
            printf("%d,  ", arr[a]);
        }
        printf("lalala  000  \r\n");
    }
}

//数组下标大的往前挪
void bubble_sort_1(int arr[], int i_arrNum)
{
    int i_temp;
    for (int i = 0; i < i_arrNum - 1; i++)
    {//整个数组需要排序 num - 1 次
        for(int j = (i_arrNum - 2); j >= i; j--)
        {//最后2个数的下标是 num - 1,num - 2  比较到下标是i为止 下标小于i是已经比较过的数
            if(arr[j] < arr[j + 1])
            {
                i_temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = i_temp;
            }
        }
        for (int i = 0; i < i_arrNum; i++)
        {
            printf("%d,  ", arr[i]);
        }
        printf("lalala  111  \r\n");
    }
}


int _tmain(int argc, _TCHAR* argv[])
{
    int arr_0[6] = {1, 2, 3, 4, 5, 6}; 
    bubble_sort_0(arr_0, (sizeof(arr_0) / sizeof(int)));
    printf("\r\n");
    int arr_1[6] = {1, 2, 3, 4, 5, 6};
    bubble_sort_1(arr_1, (sizeof(arr_1) / sizeof(int)));
    return 0;
}

运行结果:

 

posted @ 2018-06-25 18:31  ckrgd  阅读(166)  评论(0编辑  收藏  举报