c语言数组排序\
时间: 2025-04-21 12:43:10 浏览: 19
### C语言数组排序示例
#### 冒泡排序算法
冒泡排序是一种简单直观的排序算法。通过重复遍历要排序的数列,依次比较相邻元素,如果它们的顺序错误就交换位置。这个过程会持续进行直到没有任何一对数字需要交换为止。
```c
void bubbleSort(int arr[], int n) {
for (int i = 0; i < n - 1; ++i) { // 外层控制轮次
bool swapped = false;
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;
swapped = true;
}
}
// 如果某一轮没有发生任何交换,则说明已经完成排序
if (!swapped) break;
}
}
```
上述代码实现了基本的冒泡排序逻辑[^3]。为了提高效率,在内循环结束后增加了`swapped`标志位来检测是否有过实际的数据交换动作;如果没有则提前终止外循环,减少不必要的迭代次数。
#### 字符串数组排序
对于字符类型的数组同样可以应用类似的思路来进行字典序上的升序排列:
```c
#include <string.h>
// 定义字符串指针数组并初始化
const char* names[] = {"Alice", "Bob", "Charlie", "David"};
// 自定义比较函数用于qsort调用
static int compare(const void *a, const void *b){
return strcmp(*(char**)a, *(char**)b);
}
int main(){
size_t length = sizeof(names)/sizeof(*names);
qsort((void*)names, length , sizeof(char*), compare);
for(size_t idx=0 ;idx<length;++idx){
printf("%s\n", names[idx]);
}
return 0;
}
```
这段程序展示了如何利用标准库中的`qsort()`函数配合自定义的比较器对字符串数组执行快速排序[^4]。注意这里的`compare`函数接收的是指向字符串指针的参数,并返回两者之间的差异值供`qsort`判断前后关系。
#### 插入排序简介
除了以上两种方式之外还有其他多种有效的排序技术可供选择,比如插入排序也是较为基础的一种方法。其核心思想是在已有的有序序列基础上逐步构建最终完整的有序列表。每次从未处理部分取出一个记录按关键字大小插到前面适当的位置上形成新的有序子表。
```c
void insertionSort(int array[], int size) {
for (int step = 1; step < size; step++) {
int key = array[step];
int j = step - 1;
while (key < array[j] && j >= 0) {
array[j + 1] = array[j];
--j;
}
array[j + 1] = key;
}
}
```
此段代码片段给出了插入排序的一个具体实现版本[^1]。该算法的时间复杂度通常情况下优于冒泡排序,特别是在接近于完全有序的情况下表现更佳。
阅读全文
相关推荐
















