首页 > 要闻简讯 > 精选范文 >

c语言数组五种排序法

2025-06-03 13:37:12

问题描述:

c语言数组五种排序法,时间来不及了,求直接说重点!

最佳答案

推荐答案

2025-06-03 13:37:12

在C语言中,数组是一种非常重要的数据结构,而对数组进行排序是编程中的常见需求。本文将介绍五种常用的数组排序方法,帮助大家更好地理解和掌握这些基础算法。

1. 冒泡排序(Bubble Sort)

冒泡排序是最简单的排序算法之一。它通过重复地遍历数组,比较相邻元素并交换顺序错误的元素来实现排序。虽然效率较低,但其逻辑简单,适合初学者学习。

```c

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;

}

}

}

}

```

2. 插入排序(Insertion Sort)

插入排序的思想类似于打牌时整理手牌的过程。它通过构建一个有序序列,逐步将未排序的部分插入到已排序部分中。这种方法对于小规模数据表现较好。

```c

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;

}

}

```

3. 选择排序(Selection Sort)

选择排序的基本思想是每次从未排序的部分找到最小值,并将其放到已排序部分的末尾。尽管效率不高,但它的时间复杂度稳定为O(n²),适用于数据量较小的情况。

```c

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[minIndex];

arr[minIndex] = arr[i];

arr[i] = temp;

}

}

```

4. 快速排序(Quick Sort)

快速排序是一种高效的排序算法,采用分治法策略。它通过选定一个基准值,将数组分为左右两部分,然后递归地对这两部分进行排序。

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

for (int j = low; j <= high - 1; j++) {

if (arr[j] < pivot) {

i++;

swap(&arr[i], &arr[j]);

}

}

swap(&arr[i + 1], &arr[high]);

return (i + 1);

}

```

5. 归并排序(Merge Sort)

归并排序也是一种基于分治法的排序算法,它将数组分成两半,分别对每一半进行排序,最后将两个有序数组合并成一个有序数组。这种方法的优点在于稳定性和良好的性能。

```c

void mergeSort(int arr[], int l, int r) {

if (l < r) {

int m = l + (r - l) / 2;

mergeSort(arr, l, m);

mergeSort(arr, m + 1, r);

merge(arr, l, m, r);

}

}

void merge(int arr[], int l, int m, int r) {

int n1 = m - l + 1;

int n2 = r - m;

int L[n1], R[n2];

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

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

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

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

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

while (i < n1 && j < n2) {

if (L[i] <= R[j]) {

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

} else {

arr[k++] = R[j++];

}

}

while (i < n1)

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

while (j < n2)

arr[k++] = R[j++];

}

```

以上介绍了五种常见的C语言数组排序方法,每种方法都有其适用场景和优缺点。根据实际需求选择合适的排序算法,可以提高程序的运行效率。希望本文能为你的学习或工作带来帮助!

免责声明:本答案或内容为用户上传,不代表本网观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。 如遇侵权请及时联系本站删除。