【揭秘C语言高效排序技巧】轻松掌握多种算法,提升代码性能与效率

发布时间:2025-05-23 00:31:10

在编程范畴,排序算法是基本且重要的部分。C言语作为一种高效、机动的编程言语,在处理数据排序时供给了多种算法。控制这些算法不只可能晋升代码机能,还能加强编程才能。本文将具体介绍多少种C言语中的高效排序技能,帮助读者轻松控制。

1. 冒泡排序(Bubble Sort)

冒泡排序是一种简单的排序算法,它反复地遍历要排序的数列,一次比较两个元素,假如它们的次序错误就把它们交换过去。遍历数列的任务是反复地停止直到不再须要交换,也就是说该数列曾经排序实现。

1.1 冒泡排序的代码实现

#include <stdio.h>

void bubbleSort(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;
            }
        }
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr)/sizeof(arr[0]);
    bubbleSort(arr, n);
    printf("Sorted array: \n");
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
    printf("\n");
    return 0;
}

2. 抉择排序(Selection Sort)

抉择排序是一种简单直不雅的排序算法。它的任务道理是:起首在未排序序列中找到最小(大年夜)元素,存放到排序序列的肇端地位,然后,再从剩余未排序元素中持续寻觅最小(大年夜)元素,然后放到已排序序列的末端。以此类推,直到全部元素均排序结束。

2.1 抉择排序的代码实现

#include <stdio.h>

void selectionSort(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[min_idx];
        arr[min_idx] = arr[i];
        arr[i] = temp;
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr)/sizeof(arr[0]);
    selectionSort(arr, n);
    printf("Sorted array: \n");
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
    printf("\n");
    return 0;
}

3. 拔出排序(Insertion Sort)

拔出排序是一种简单直不雅的排序算法。它的任务道理是经由过程构建有序序列,对未排序数据,在已排序序列中从后向前扫描,找到响应地位并拔出。拔出排序在实现上,平日采取in-place排序(即只有效到O(1)的额定空间的排序)。

3.1 拔出排序的代码实现

#include <stdio.h>

void insertionSort(int arr[], int n) {
    int i, key, j;
    for (i = 1; i < n; i++) {
        key = arr[i];
        j = i - 1;

        while (j >= 0 && arr[j] > key) {
            arr[j + 1] = arr[j];
            j = j - 1;
        }
        arr[j + 1] = key;
    }
}

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr)/sizeof(arr[0]);
    insertionSort(arr, n);
    printf("Sorted array: \n");
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
    printf("\n");
    return 0;
}

4. 疾速排序(Quick Sort)

疾速排序是由东尼·霍尔所提出的一种排序算法。在均匀状况下,疾速排序比其他算法快很多,因此,它成为了一种非常风行的排序算法。疾速排序采取分而治之的战略,将原始数组分红较小的数组跟较大年夜的数组,然后递归地对这两个数组停止疾速排序。

4.1 疾速排序的代码实现

#include <stdio.h>

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);
    }
}

int main() {
    int arr[] = {10, 7, 8, 9, 1, 5};
    int n = sizeof(arr)/sizeof(arr[0]);
    quickSort(arr, 0, n-1);
    printf("Sorted array: \n");
    for (int i = 0; i < n; i++)
        printf("%d ", arr[i]);
    printf("\n");
    return 0;
}

总结

经由过程以上多少种排序算法的介绍,我们可能看到C言语在处理数据排序时供给了丰富的抉择。控制这些算法不只可能晋升代码机能,还能加强编程才能。在现实利用中,我们可能根据具体须要抉择合适的排序算法,以达到最佳的机能表示。