简介:介绍C语言中常用的数组排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。通过比较它们的优缺点,帮助读者在实际应用中选择合适的排序算法。
在C语言中,对数组进行排序是常见的操作。下面介绍几种常用的排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。这些算法各有特点,适合不同场景的应用。
一、冒泡排序(Bubble Sort)
冒泡排序是一种简单的排序算法,它通过不断地比较相邻元素并交换位置,使得较大的元素逐渐“浮”到数组的末尾。
void bubble_sort(int arr[], int n) {int i, j, temp;for (i = 0; i < n-1; i++) {for (j = 0; j < n-i-1; j++) {if (arr[j] > arr[j+1]) {temp = arr[j];arr[j] = arr[j+1];arr[j+1] = temp;}}}}
优点:实现简单,容易理解。
缺点:时间复杂度较高,为O(n^2),在大数据集上效率较低。
二、选择排序(Selection Sort)
选择排序是一种简单直观的排序算法,它的基本思想是从未排序的元素中找出最小(或最大)的元素,存放到已排序序列的末尾。
void selection_sort(int arr[], int n) {int i, j, min_idx;for (i = 0; i < n-1; i++) {min_idx = i;for (j = i+1; j < n; j++) {if (arr[j] < arr[min_idx]) {min_idx = j;}}int temp = arr[i];arr[i] = arr[min_idx];arr[min_idx] = temp;}}
优点:实现简单,容易理解。
缺点:时间复杂度较高,为O(n^2),在大数据集上效率较低。
三、插入排序(Insertion Sort)
插入排序的基本思想是将数组分为已排序和未排序两部分,初始时已排序部分包含一个元素,然后逐步将未排序元素插入到已排序部分的合适位置。
void insertion_sort(int arr[], int n) {int i, j, temp;for (i = 1; i < n; i++) {temp = arr[i];j = i - 1;while (j >= 0 && arr[j] > temp) {arr[j+1] = arr[j];j--;}arr[j+1] = temp;}}
优点:在数据量较小或部分有序的情况下效率较高。
缺点:时间复杂度较高,为O(n^2),在大数据集上效率较低。
四、快速排序(Quick Sort)
快速排序是一种高效的排序算法,它使用分治的思想将数组划分为两个子数组,分别对子数组进行递归排序,最终实现整个数组的有序。