C语言排序算法积累(1)冒泡排序

冒泡排序法是一种排序算法,例如将int arr[]数组内的元素按照升序排序

原理:比较前后每两个数,较大的数往后排,第一轮下来最大的数就排到了最后。然后再进行第二轮比较,第二大的数也排到倒数第二,以此类推。


第一轮比较:
第一次比较:0,1,5,3,2,1,7,3,5,6 第一个数大于第二个数,调换位置
第二次比较:0,1,5,3,2,1,7,3,5,6 第二个数不大于第三个数,不调换位置
第三次比较:0,1,3,5,2,1,7,3,5,6 第三个数大于第四个数,调换位置
第四次比较:0,1,3,2,5,1,7,3,5,6 第四个数大于第五个数,调换位置
......以此类推
第九次比较:0,1,3,2,1,5,3,5,6,7 第九个数大于第十个数,调换位置
以上完成了第一轮比较,将这一轮的最大数排到了最后面,比较次数9
第二轮比较:
跟第一轮一样,但可以发现,最后一个数字不需要比较,因为它是最大的数,比较次数8
第三轮比较:
比较次数7
......以此类推
第九轮比较:
比较次数1

结论:排列10个数需要比较9轮,每一轮比较的次数由9次递减至1次


代码:

#include
void main()
{
    //定义一个数组
    int arr[] = { 1,0,5,3,2,1,7,3,5,6 };
    //升序排序
    for (int i = 0; i < sizeof(arr) / sizeof(arr[0]) - 1; i++)
    {
        for (int j = 0; j < sizeof(arr) / sizeof(arr[0]) - 1 - i; j++)
        {
            if (arr[j] > arr[j + 1])//如果是降序排列则相反
            {
                int tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }
    //输出排序后数组
    for (i = 0; i < sizeof(arr) / sizeof(arr[0]); i++)
    {
        printf("%d ", arr[i]);
    }
}

你可能感兴趣的:(C语言排序算法积累(1)冒泡排序)