21xrx.com
2024-11-21 21:52:21 Thursday
登录
文章检索 我的文章 写文章
C语言常用的排序算法总结
2023-10-25 21:07:48 深夜i     --     --
排序算法 C语言 常用 总结

排序是计算机科学中常见的基本操作之一,而C语言作为一种广泛应用的编程语言,拥有丰富且高效的排序算法。本文将总结一些常用的C语言排序算法,并介绍它们的原理和实现方法。

1. 冒泡排序(Bubble Sort)

冒泡排序是一种简单但效率较低的排序算法。它重复地比较相邻的元素,如果顺序错误就交换位置,直到整个序列有序为止。该算法的时间复杂度为O(n^2)。冒泡排序的实现如下:


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]) {

        int temp = arr[j];

        arr[j] = arr[j+1];

        arr[j+1] = temp;

      }

    }

  }

}

2. 插入排序(Insertion Sort)

插入排序是一种简单且效率较高的排序算法。它从第二个元素开始,将当前元素与前面的元素比较并插入到正确的位置,直到整个序列有序为止。该算法的时间复杂度为O(n^2)。插入排序的实现如下:


void insertionSort(int arr[], int n) {

  for (int i = 1; i < n; 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;

  }

}

3. 快速排序(Quick Sort)

快速排序是一种常用且高效的排序算法。它通过选择一个基准元素,将序列分隔成较小和较大的两部分,然后递归地对这两部分进行排序。该算法的时间复杂度为O(nlogn)。快速排序的实现如下:


int partition(int arr[], int low, int high) {

  int pivot = arr[high];

  int i = low - 1;

  for (int j = low; j <= high-1; j++) {

    if (arr[j] < pivot) {

      i++;

      int temp = arr[i];

      arr[i] = arr[j];

      arr[j] = temp;

    }

  }

  int temp = arr[i+1];

  arr[i+1] = arr[high];

  arr[high] = temp;

  return (i + 1);

}

void quickSort(int arr[], int low, int high) {

  if (low < high) {

    int pi = partition(arr, low, high);

    quickSort(arr, low, pi-1);

    quickSort(arr, pi+1, high);

  }

}

4. 归并排序(Merge Sort)

归并排序是一种稳定且高效的排序算法。它将序列拆分成较小的子序列,然后将这些子序列逐一进行合并排序,直到整个序列有序为止。该算法的时间复杂度为O(nlogn)。归并排序的实现如下:


void merge(int arr[], int l, int m, int r) {

  int i, j, k;

  int n1 = m - l + 1;

  int n2 = r - m;

  int L[n1], R[n2];

  for (i = 0; i < n1; i++)

    L[i] = arr[l + i];

  for (j = 0; j < n2; j++)

    R[j] = arr[m + 1 + j];

  i = 0;

  j = 0;

  k = l;

  while (i < n1 && j < n2) {

    if (L[i] <= R[j]) {

      arr[k] = L[i];

      i++;

    }

    else {

      arr[k] = R[j];

      j++;

    }

    k++;

  }

  while (i < n1) {

    arr[k] = L[i];

    i++;

    k++;

  }

  while (j < n2) {

    arr[k] = R[j];

    j++;

    k++;

  }

}

void mergeSort(int arr[], int l, int r) {

  if (l < r) {

    int m = l + (r - l) / 2;

    mergeSort(arr, l, m);

    mergeSort(arr, m + 1, r);

    merge(arr, l, m, r);

  }

}

以上是几种常用的C语言排序算法的总结。通过合理选择适合问题的排序算法,可以提高程序的性能和效率。在实际应用中,还要根据排序的规模和数据特点,选择合适的算法来解决排序问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复