admin 管理员组

文章数量: 887021


2024年2月19日发(作者:cp命令复制文件夹)

排序c语言代码

一、排序算法简介

排序算法是计算机科学中一个重要的基础问题,主要用于将一组元素按照特定的顺序重新排列。在C语言中,有多种排序算法可以选择,每种算法都有其特点和适用场景。

二、冒泡排序

冒泡排序是一种基本的排序算法,它的原理是比较相邻的两个元素,如果顺序错误则交换它们,直到整个数组排好序为止。以下是冒泡排序的C语言代码:

void bubbleSort(int arr[], int n) {

int i, j;

for (i = 0; i < n-1; i++) {

for (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;

}

}

}

}

三、插入排序

插入排序是一种简单直观的排序算法,它的原理是将未排序的元素逐个插入到已排序的序列中。以下是插入排序的C语言代码:

void insertionSort(int arr[], int n) {

int i, j, key;

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;

}

}

四、选择排序

选择排序是一种简单直观的排序算法,它的原理是每次从待排序的序列中选择最小(或最大)的元素,放到已排序的序列的末尾。以下是选择排序的C语言代码:

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;

}

}

五、快速排序

快速排序是一种常用的排序算法,它的原理是选择一个基准元素,将比基准小的元素放到左边,将比基准大的元素放到右边,然后对左右两个子序列进行递归排序。以下是快速排序的C语言代码:

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 partition(int arr[], int low, int high) {

int pivot = arr[high];

int i = low - 1;

int j;

for (j = low; j < high; 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 t = *a;

*a = *b;

*b = t;

}

六、归并排序

归并排序是一种高效的排序算法,它的原理是将待排序的序列分成两个子序列,分别进行排序,然后将两个排序好的子序列合并成一个有序序列。以下是归并排序的C语言代码:

void merge(int arr[], int left, int mid, int right) {

int i, j, k;

int n1 = mid - left + 1;

int n2 = right - mid;

int L[n1], R[n2];

for (i = 0; i < n1; i++) {

L[i] = arr[left + i];

}

for (j = 0; j < n2; j++) {

R[j] = arr[mid + 1 + j];

}

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

}

}

七、总结

本文介绍了一些常用的排序算法,在C语言中的实现代码。这些排序算法各有优缺点,适用于不同的场景。学习和掌握这些算法,可以帮助我们更好地理解计算机科学中的排序问题,并能够根据具体情况选择合适的算法来提高代码的效率。通过实践和不断的学习,我们可以进一步深入了解排序算法的原理和优化方法,提升自己的编程能力。


本文标签: 排序 算法 序列 代码 元素