C 语言从小到大排序83
C 语言中的数组是一个连续内存区域,可以存储相同数据类型的值。排序数组是一个常见任务,它可以简化数据检索和处理。本文将介绍在 C 语言中从从小到大对数组进行排序的各种方法。
冒泡排序
冒泡排序是一种简单直观的排序算法。它反复比较相邻元素,并将较大的元素向后移动。这个过程一直重复,直到没有更多的元素可以移动。冒泡排序的时间复杂度为 O(n^2),其中 n 是数组的大小。
void bubble_sort(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;
}
}
}
}
选择排序
选择排序是一种另一种简单的排序算法。它在未排序的数组中找到最小元素,并将其与数组的第一个元素交换。然后,它继续在剩余的数组中找到最小元素,并将其与下一个未排序元素交换。选择排序的时间复杂度也为 O(n^2)。
void selection_sort(int arr[], int n) {
for (int i = 0; i < n - 1; i++) {
int min = i;
for (int j = i + 1; j < n; j++) {
if (arr[j] < arr[min]) {
min = j;
}
}
int temp = arr[i];
arr[i] = arr[min];
arr[min] = temp;
}
}
插入排序
插入排序是一种高效的排序算法,它通过将每个元素插入到已经排序的部分中来工作。它从第二个元素开始,依次比较每个元素与已经排序的部分,并将其插入到正确的位置。插入排序的时间复杂度为 O(n^2),但在几乎有序的数组上表现良好。
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;
}
}
归并排序
归并排序是一种基于分治思想的排序算法。它将数组分解为较小的子数组,递归地对这些子数组进行排序,然后将排序后的子数组合并在一起。归并排序的时间复杂度为 O(n log n),无论数组是否已经排序。
void merge_sort(int arr[], int left, int right) {
if (left < right) {
int mid = (left + right) / 2;
merge_sort(arr, left, mid);
merge_sort(arr, mid + 1, right);
merge(arr, left, mid, right);
}
}
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 + j + 1];
}
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++;
}
}
快速排序
快速排序是一种基于分治思想的另一种排序算法。它选择一个枢纽元素,并将数组分成两部分:比枢纽元素小的元素和比枢纽元素大的元素。然后递归地对这两部分进行排序。快速排序的平均时间复杂度为 O(n log n),但最坏情况下可能退化为 O(n^2)。
void quick_sort(int arr[], int low, int high) {
if (low < high) {
int partition_index = partition(arr, low, high);
quick_sort(arr, low, partition_index - 1);
quick_sort(arr, partition_index + 1, high);
}
}
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j]
2024-10-30
上一篇:C 语言中返回数组的函数
下一篇:C语言中输出字符颜色的优雅指南
Python字符串查找与判断:从基础到高级的全方位指南
https://www.shuihudhg.cn/134118.html
C语言如何高效输出字符串“inc“?深度解析printf、puts及格式化输出
https://www.shuihudhg.cn/134117.html
PHP高效获取CSV文件行数:从小型文件到海量数据的最佳实践与性能优化
https://www.shuihudhg.cn/134116.html
C语言控制台图形输出:从入门到精通的ASCII艺术实践
https://www.shuihudhg.cn/134115.html
Python在Linux环境下的执行与自动化:从基础到高级实践
https://www.shuihudhg.cn/134114.html
热门文章
C 语言中实现正序输出
https://www.shuihudhg.cn/2788.html
c语言选择排序算法详解
https://www.shuihudhg.cn/45804.html
C 语言函数:定义与声明
https://www.shuihudhg.cn/5703.html
C语言中的开方函数:sqrt()
https://www.shuihudhg.cn/347.html
C 语言中字符串输出的全面指南
https://www.shuihudhg.cn/4366.html