c语言编程笔录

首页 >   > 笔记大全

笔记大全

c语言排序效率

更新时间:2024-01-13

前言

排序算法是计算机科学中的基本算法之一,广泛应用于各个领域。排序算法的效率对于程序的性能至关重要。C语言作为一种通用的编程语言,具有高效的执行速度和广泛的应用范围,因此在排序算法的实现上也占据着重要的地位。

选择排序

选择排序是一种简单直观的排序算法。它的基本思想是从待排序的数据中选择最小(或最大)的元素,依次放置到已排序的数据末尾。具体实现如下:

void selectionSort(int arr[], int n) {
    int i, j, minIndex, temp;
    for (i = 0; i < n-1; i++) {
        minIndex = i;
        for (j = i+1; j < n; j++) {
            if (arr[j] < arr[minIndex])
                minIndex = j;
        }
        temp = arr[minIndex];
        arr[minIndex] = arr[i];
        arr[i] = temp;
    }
}

选择排序的时间复杂度为O(n^2),其中n是待排序数据的个数。尽管选择排序的效率相对较低,但它的实现简单,对于小规模的数据排序仍然是一个不错的选择。

快速排序

快速排序是一种高效的排序算法。它采用了分治的思想,将大问题划分为小问题,并分别解决。具体实现如下:

void quickSort(int arr[], int low, int high) {
    if (low < high) {
        int pivot = partition(arr, low, high);
        quickSort(arr, low, pivot - 1);
        quickSort(arr, pivot + 1, high);
    }
}

int partition(int arr[], int low, int high) {
    int pivot = arr[high];
    int i = (low - 1);
    int j;
    for (j = low; j <= high-1; j++) {
        if (arr[j] <= pivot) {
            i++;
            swap(&arr[i], &arr[j]);
        }
    }
    swap(&arr[i+1], &arr[high]);
    return (i + 1);
}

void swap(int* a, int* b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

快速排序的时间复杂度为O(nlogn),但在最坏情况下可能达到O(n^2)。尽管如此,快速排序仍然被广泛使用,因为它的平均性能非常好。快速排序也是C标准库中的排序函数qsort()的实现方式之一。

总结

在C语言中,选择排序和快速排序是常用的排序算法。选择排序简单直观,适用于小规模的数据排序,但效率相对较低;而快速排序采用了更高级的分治思想,能够处理大规模数据的排序。在实际应用中,根据具体的排序需求和数据规模,选择合适的排序算法是保证程序性能的关键。