AI 日报

常见的初级排序算法,这次全搞懂

  • By admin
  • Oct 31, 2023 - 2 min read



排序算法的意义和分类

排序算法是计算机科学中的基本问题之一,其作用是将一组数据按照指定的顺序进行排列。排序算法广泛应用于各个领域,例如计算机图形学、数据库系统、数据压缩、网络路由等。排序算法按照不同的思想和实现方式可以分为多种分类,常见的初级排序算法主要包括冒泡排序、插入排序和选择排序。

冒泡排序

冒泡排序是一种简单且易于理解的排序算法,其思想是通过比较相邻元素的大小,逐步将最大(或最小)的元素交换到末尾。具体实现时,从第一个元素开始,依次比较相邻的两个元素,如果前者大于后者,则交换位置。经过一轮的比较,最大(或最小)的元素就被交换到了末尾。然后再从第一个元素开始,进行下一轮的比较和交换,直到所有元素都按照指定顺序排列好。

// 冒泡排序实现代码示例
void bubbleSort(int arr[], int n) {
    for(int i = 0; i < n - 1; i++) {
        for(int j = 0; j < n - i - 1; j++) {
            if(arr[j] > arr[j+1]) {
                // 交换相邻元素的位置
                swap(arr[j], arr[j+1]);
            }
        }
    }
}

插入排序

插入排序是将数据分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的合适位置。具体实现时,从第二个元素开始,将其与已排序部分的元素逐个比较并向后移动,直到找到合适的位置插入。通过不断地重复这个过程,直到所有元素都插入到已排序部分,即完成了排序。

// 插入排序实现代码示例
void insertionSort(int arr[], int n) {
    for(int i = 1; i < n; i++) {
        // 将arr[i]插入到已排序部分的合适位置
        int key = arr[i];
        int j = i - 1;
        while(j >= 0 && arr[j] > key) {
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1] = key;
    }
}

选择排序

选择排序是一种简单直观的排序算法,其思想是每次从未排序部分选择最小(或最大)的元素,与未排序部分的第一个元素交换位置。具体实现时,从第一个元素开始,依次与后面的元素比较,找到最小(或最大)的元素,然后与第一个元素交换位置。然后从第二个元素开始,再次选择未排序部分的最小(或最大)元素放到相应的位置,以此类推,直到所有元素都按照指定顺序排列好。

// 选择排序实现代码示例
void selectionSort(int arr[], int n) {
    for(int i = 0; i < n - 1; i++) {
        int minIdx = i;
        for(int j = i + 1; j < n; j++) {
            if(arr[j] < arr[minIdx]) {
                minIdx = j;
            }
        }
        if(minIdx != i) {
            // 交换最小元素与当前元素的位置
            swap(arr[i], arr[minIdx]);
        }
    }
}