c语言如何排序

知识问答 2026-11-05 00:50:08 来源:互联网

C语言中排序主要有两种方法:冒泡排序、选择排序、插入排序、快速排序、归并排序和堆排序,这里简要介绍一下这几种排序方法的原理和代码实现。

1、冒泡排序:通过比较相邻元素的大小,将较大的元素交换到右边,重复进行,直到没有需要交换的元素为止。

#include <stdio.h>void bubble_sort(int arr[], int n) {    for (int i = 0; i < n - 1; i++) {        for (int j = 0; j < n - 1 - i; j++) {            if (arr[j] > arr[j + 1]) {                int temp = arr[j];                arr[j] = arr[j + 1];                arr[j + 1] = temp;            }        }    }}

2、选择排序:每次从未排序的部分中找到最小(或最大)的元素,将其放到已排序部分的末尾。

#include <stdio.h>void selection_sort(int arr[], int n) {    for (int i = 0; i < n - 1; i++) {        int min_index = i;        for (int j = i + 1; j < n; j++) {            if (arr[j] < arr[min_index]) {                min_index = j;            }        }        if (min_index != i) {            int temp = arr[i];            arr[i] = arr[min_index];            arr[min_index] = temp;        }    }}

3、插入排序:将未排序部分的靠前个元素插入到已排序部分中的合适位置。

#include <stdio.h>void insertion_sort(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;    }}

4、快速排序:选择一个基准元素,将数组分为两部分,使得左边的元素都小于基准元素,右边的元素都大于基准元素,然后对这两部分分别进行快速排序,这个过程可以递归进行。

#include <stdio.h>#include <stdlib.h>int partition(int arr[], int low, int high) {    int pivot = arr[low];    int i = low + 1;    int j = high;    while (1) {        while (i <= j && arr[i] <= pivot) i++;        while (i <= j && arr[j] > pivot) j--;        if (i <= j) {            int temp = arr[i];            arr[i] = arr[j];            arr[j] = temp;        } else break;    }    int temp = arr[low];    arr[low] = arr[j];    arr[j] = temp;    return j;}void quick_sort(int arr[], int low, int high) {    if (low < high) {        int pivot_index = partition(arr, low, high);        quick_sort(arr, low, pivot_index);        quick_sort(arr, pivot_index + 1, high);    }}