C语言 冒泡排序

冒泡排序简介

冒泡排序的基本操作就是将重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,时间复杂度为O(n^2)。

冒泡排序的模拟过程可以看链接:BubbleSortion

实现过程

为了比较容易地理解冒泡排序,我们可以列出一组数据,比如:
5,6,4

我列出了两种方法分别说明插入排序的实现过程,你可以选择自己喜欢的方法:

第一种

对于冒泡排序算法来说:
1. 第一轮:
比较5, 6–> 比较6, 4交换–> 比较4, 6
得到数据:5, 4, 6
2. 第二轮:
比较5, 4交换–> 比较4, 5
得到数据4, 5, 6

第二种

这里写图片描述

分析以上过程,我们发现冒泡排序有两个关键要素:
1. 为了能够进行重复的来回循环,我们需要用到迭代
2. 通过每次遍历最大的数都放在了队列的末尾

代码实现

#include <stdio.h>

void print(const int *a, const int length) {
    int i;
    for (i = 0; i<length; i++) {
        printf("%d ", a[i]);
    }
    putchar('\n');
}

void exchange(int *a, const int i, const int j) {
    int tmp = *(a + i);
    *(a + i) = *(a + j);
    *(a + j) = tmp;
}

void bubbleSort(int *a, const int length) {
    for (int i = 0; i < length; i++) {
        //迭代
        for (int j = 0; j + 1 < length-i; j++) {
            if (a[j] > a[j + 1]) {  //前后的两个数比较
                exchange(a, j, j + 1);
            }
        }
        print(a, length);
    }
}



void main() {
    const int length = 5;
    int my_array[5] = { 6,5,7,3,4};
    print(my_array, length);

    bubbleSort(my_array, length);
    print(my_array, length);
}

代码精简

void bubbleSort(int *a, const int length){
    for(int i=0; i<length-1; i++){
        for(int j=0; j<length-1-i; j++){
            if(j+1<length && a[j]>a[j+1]){
                int tmp = a[j];
                a[j] = a[j+1];
                a[j+1] = tmp;
            }
        }
    }
}

猜你喜欢

转载自blog.csdn.net/fpk2014/article/details/80444978