c语言 把n个数排序
时间: 2024-12-18 22:34:15 浏览: 3
在C语言中,对n个数进行排序有多种算法可以选择,其中比较常见的包括:
1. **冒泡排序(Bubble Sort)**:通过不断交换相邻未按顺序排列的元素,每一轮将最大的数“浮”到数组的末尾。简单易懂,但效率不高,时间复杂度为O(n^2)。
2. **选择排序(Selection Sort)**:每次从未排序的部分选出最小(或最大)的元素放到已排序部分的末尾。也是O(n^2)复杂度。
3. **插入排序(Insertion Sort)**:类似于打扑克牌,将每个元素插入到已排序序列的适当位置。同样属于O(n^2),但对于部分有序的数据性能较好。
4. **快速排序(Quick Sort)**:采用分治法,选择一个基准元素,将所有小于基准的放在左边,大于基准的放在右边,递归地对左右两部分进行排序。平均时间复杂度为O(n log n),但最坏情况下为O(n^2)。
5. **归并排序(Merge Sort)**:也是分治法的一种,将数组一分为二,分别排序后再合并。时间复杂度始终为O(n log n)。
6. **堆排序(Heap Sort)**:利用堆数据结构的特性,构建大顶堆或小顶堆,然后反复调整堆使其满足排序条件。时间复杂度为O(n log n)。
为了实现排序,你可以选择对应的函数库(如标准库中的qsort()),或是自己编写排序函数。下面是一个简单的冒泡排序的例子:
```c
#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;
}
}
}
}
// 测试排序
int main() {
int numbers[] = {9, 4, 6, 2, 8, 1};
int n = sizeof(numbers) / sizeof(numbers[0]);
bubble_sort(numbers, n);
printf("Sorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", numbers[i]);
}
return 0;
}
```
阅读全文