c语言编程笔录

首页 >   > 笔记大全

笔记大全

c语言冒泡排序和选择排序

更新时间:2023-09-25

冒泡排序和选择排序

冒泡排序和选择排序是两种常见的排序算法,用于将一组元素按照一定的规则进行排序。接下来,让我们分别介绍和实现这两种排序算法。

冒泡排序

冒泡排序的基本思想是通过相邻元素之间的比较和交换,将较大的元素逐渐“冒泡”到数组的末尾。算法的流程如下:

void bubbleSort(int arr[], int size) {
    for (int i = 0; i < size - 1; i++) {
        for (int j = 0; j < size - i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                // 交换arr[j]和arr[j+1]
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

首先,我们使用两个嵌套的循环迭代数组中的每个元素。内层循环从第一个元素开始,遍历到当前未排序元素的前一个元素。

在内层循环中,如果当前元素比下一个元素大,则交换它们的位置。通过这样的比较和交换操作,每一轮内层循环都会将当前未排序区间的最大元素 “冒泡” 到该区间的末尾。

重复执行外层循环,每次都将未排序区间的最大元素冒泡到末尾,直到整个数组有序为止。

选择排序

选择排序的基本思想是从待排序的数据中,选择最小(或最大)的元素放到已排序序列的末尾,不断缩小未排序区间。算法的流程如下:

void selectionSort(int arr[], int size) {
    int minIndex;
    for (int i = 0; i < size - 1; i++) {
        minIndex = i;
        for (int j = i + 1; j < size; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }
        // 将未排序区间的最小元素与当前元素交换位置
        int temp = arr[minIndex];
        arr[minIndex] = arr[i];
        arr[i] = temp;
    }
}

选择排序也使用两个嵌套的循环迭代数组中的每个元素,但是与冒泡排序不同的是,它在内层循环中寻找未排序区间的最小元素,并将其与该区间的第一个元素进行交换。

通过每次选择未排序区间的最小元素,并将其放到已排序序列的末尾,不断缩小未排序区间的范围,最终实现整个数组的排序。

总结

冒泡排序和选择排序都是简单但低效的排序算法,其时间复杂度均为O(n^2),其中n表示待排序数组的大小。尽管它们在实际应用中较少使用,但它们仍然是理解排序算法的基础和入门的好选择。

通过本文介绍的代码实现,您可以了解这两种排序算法的原理和实现方式。在实际开发中,您可以根据具体的需求和数据规模选择更高效的排序算法来提高程序的执行效率。