📜  排序数组 - C 编程语言(1)

📅  最后修改于: 2023-12-03 15:39:49.860000             🧑  作者: Mango

排序数组 - C 编程语言

排序算法是计算机科学中最基本的算法之一,可以采用多种不同的算法实现。在 C 编程语言中对数组进行排序通常使用快速排序(Quick Sort)或归并排序(Merge Sort)。

快速排序

快速排序是一种基于分治思想的排序算法。具体实现过程如下:

  1. 选择一个基准元素,将列表分割成两个子序列;
  2. 对子序列重复第一步直到不能再分割;
  3. 重新组合子序列,使左边的子序列小于基准元素,右边的子序列大于基准元素。

代码实现如下:

void quicksort(int arr[], int low, int high) {
    int pivot, i, j, temp;
    if (low < high) {
        pivot = low;
        i = low;
        j = high;
        while (i < j) {
            while (arr[i] <= arr[pivot] && i <= high) {
                i++;
            }
            while (arr[j] > arr[pivot] && j >= low) {
                j--;
            }
            if (i < j) {
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        temp = arr[j];
        arr[j] = arr[pivot];
        arr[pivot] = temp;
        quicksort(arr, low, j - 1);
        quicksort(arr, j + 1, high);
    }
}
归并排序

归并排序也是基于分治思想的排序算法,具体实现过程如下:

  1. 将序列分成两个子序列,分别进行排序;
  2. 将两个已排序的子序列合并。

代码实现如下:

void merge(int arr[], int low, int mid, int high) {
    int i, j, k, temp[high - low + 1];
    i = low;
    k = 0;
    j = mid + 1;
    while (i <= mid && j <= high) {
        if (arr[i] < arr[j]) {
            temp[k] = arr[i];
            k++;
            i++;
        }
        else {
            temp[k] = arr[j];
            k++;
            j++;
        }
    }
    while (i <= mid) {
        temp[k] = arr[i];
        k++;
        i++;
    }
    while (j <= high) {
        temp[k] = arr[j];
        k++;
        j++;
    }
    for (i = low; i <= high; i++) {
        arr[i] = temp[i - low];
    }
}

void mergesort(int arr[], int low, int high) {
    int mid;
    if (low < high) {
        mid = (low + high) / 2;
        mergesort(arr, low, mid);
        mergesort(arr, mid + 1, high);
        merge(arr, low, mid, high);
    }
}

以上两种算法都是基于递归实现的。实际使用时需要注意处理递归深度和栈溢出问题。

总结

排序数组问题是常见的编程问题,针对不同的场景和需求可以采用不同的排序算法。在 C 编程语言中实现快速排序和归并排序比较常见,本文对其基本实现过程进行了讲解。