探索排序算法:C语言实现常见排序方法


探索排序算法:C语言实现常见排序方法

排序算法是计算机科学中一个基本且重要的领域,它们在数据处理和搜索等任务中扮演着关键角色。本篇博客将深入介绍几种常见的排序算法:冒泡排序、插入排序、选择排序、归并排序和快速排序,以及在C语言中的实现示例。

冒泡排序

冒泡排序是一种简单的比较排序算法,它反复遍历待排序的元素,每次比较相邻的两个元素,并交换顺序,直到整个序列有序为止。下面是冒泡排序的C语言实现示例:

#include 

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

int main() {
    int arr[] = {64, 34, 25, 12, 22, 11, 90};
    int n = sizeof(arr) / sizeof(arr[0]);

    bubbleSort(arr, n);

    printf("Sorted array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

插入排序

插入排序是一种稳定的比较排序算法,它将待排序的元素逐个插入到已排序的序列中,最终得到一个有序序列。下面是插入排序的C语言实现示例:

#include 

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

int main() {
    int arr[] = {12, 11, 13, 5, 6};
    int n = sizeof(arr) / sizeof(arr[0]);

    insertionSort(arr, n);

    printf("Sorted array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

选择排序

选择排序是一种简单直观的排序算法,它每次从待排序的元素中选取最小(或最大)的元素放到已排序的序列末尾。下面是选择排序的C语言实现示例:

#include 

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

        for (int j = i + 1; j < n; j++) {
            if (arr[j] < arr[minIndex]) {
                minIndex = j;
            }
        }

        int temp = arr[i];
        arr[i] = arr[minIndex];
        arr[minIndex] = temp;
    }
}

int main() {
    int arr[] = {64, 25, 12, 22, 11};
    int n = sizeof(arr) / sizeof(arr[0]);

    selectionSort(arr, n);

    printf("Sorted array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

归并排序

归并排序是一种分治法排序算法,它将待排序的序列分成两个子序列,分别排序后再合并。下面是归并排序的C语言实现示例:

#include 
#include 

void merge(int arr[], int left, int mid, int right) {
    int n1 = mid - left + 1;
    int n2 = right - mid;

    int L[n1], R[n2];

    for (int i = 0; i < n1; i++) {
        L[i] = arr[left + i];
    }
    for (int j = 0; j < n2; j++) {
        R[j] = arr[mid + 1 + j];
    }

    int i = 0, j = 0, k = left;

    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 left, int right) {
    if (left < right) {
        int mid = left + (right - left) / 2;

        mergeSort(arr, left, mid);
        mergeSort(arr, mid + 1, right);

        merge(arr, left, mid, right);
    }
}

int main() {
    int arr[] = {12, 11, 13, 5, 6, 7};
    int n = sizeof(arr

) / sizeof(arr[0]);

    mergeSort(arr, 0, n - 1);

    printf("Sorted array: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

快速排序

快速排序是一种常用的排序算法,它采用分治法策略,通过选择一个元素作为基准将序列分为两部分,然后递归地对子序列进行排序。下面是快速排序的C语言实现示例:

#include 

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: ");
    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");

    return 0;
}

总结

本篇博客深入探讨了排序算法中的几种常见方法:冒泡排序、插入排序、选择排序、归并排序和快速排序。通过C语言实现的示例代码,您可以更好地理解这些排序算法的工作原理和应用场景。排序算法在数据处理、搜索和优化等领域有着广泛的应用,掌握这些算法将有助于您解决各种实际问题。

希望本文对您学习排序算法和C语言编程有所帮助!如果您有任何问题或建议,请随时在评论区留言。


你可能感兴趣的:(算法,排序算法,数据结构)