c语言如何排序
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); }}