C语言中数组常用的排序算法

作者:沙与沫2024.01.18 05:31浏览量:6

简介:介绍C语言中常用的数组排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。通过比较它们的优缺点,帮助读者在实际应用中选择合适的排序算法。

在C语言中,对数组进行排序是常见的操作。下面介绍几种常用的排序算法,包括冒泡排序、选择排序、插入排序、快速排序和归并排序。这些算法各有特点,适合不同场景的应用。
一、冒泡排序(Bubble Sort)
冒泡排序是一种简单的排序算法,它通过不断地比较相邻元素并交换位置,使得较大的元素逐渐“浮”到数组的末尾。

  1. void bubble_sort(int arr[], int n) {
  2. int i, j, temp;
  3. for (i = 0; i < n-1; i++) {
  4. for (j = 0; j < n-i-1; j++) {
  5. if (arr[j] > arr[j+1]) {
  6. temp = arr[j];
  7. arr[j] = arr[j+1];
  8. arr[j+1] = temp;
  9. }
  10. }
  11. }
  12. }

优点:实现简单,容易理解。
缺点:时间复杂度较高,为O(n^2),在大数据集上效率较低。
二、选择排序(Selection Sort)
选择排序是一种简单直观的排序算法,它的基本思想是从未排序的元素中找出最小(或最大)的元素,存放到已排序序列的末尾。

  1. void selection_sort(int arr[], int n) {
  2. int i, j, min_idx;
  3. for (i = 0; i < n-1; i++) {
  4. min_idx = i;
  5. for (j = i+1; j < n; j++) {
  6. if (arr[j] < arr[min_idx]) {
  7. min_idx = j;
  8. }
  9. }
  10. int temp = arr[i];
  11. arr[i] = arr[min_idx];
  12. arr[min_idx] = temp;
  13. }
  14. }

优点:实现简单,容易理解。
缺点:时间复杂度较高,为O(n^2),在大数据集上效率较低。
三、插入排序(Insertion Sort)
插入排序的基本思想是将数组分为已排序和未排序两部分,初始时已排序部分包含一个元素,然后逐步将未排序元素插入到已排序部分的合适位置。

  1. void insertion_sort(int arr[], int n) {
  2. int i, j, temp;
  3. for (i = 1; i < n; i++) {
  4. temp = arr[i];
  5. j = i - 1;
  6. while (j >= 0 && arr[j] > temp) {
  7. arr[j+1] = arr[j];
  8. j--;
  9. }
  10. arr[j+1] = temp;
  11. }
  12. }

优点:在数据量较小或部分有序的情况下效率较高。
缺点:时间复杂度较高,为O(n^2),在大数据集上效率较低。
四、快速排序(Quick Sort)
快速排序是一种高效的排序算法,它使用分治的思想将数组划分为两个子数组,分别对子数组进行递归排序,最终实现整个数组的有序。