在C语言程序设计中,排序算法是至关重要的概念,它用于组织和整理数据,使其按照特定的顺序排列。本教程主要介绍了两种常见的排序方法:冒泡排序和选择排序。
1. **冒泡排序**(Bubble Sort):
冒泡排序是一种简单直观的排序算法,其工作原理是通过重复遍历待排序的数列,依次比较相邻的两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。在这个过程中,每经过一轮遍历,最大的元素就会“浮”到数列的末尾。例如,对于序列21, 13, 90, 32, -1,冒泡排序的过程如下:
- 第一轮比较,最大值90与-1交换,序列变为-1, 13, 21, 32, 90。
- 第二轮比较,无需交换,序列保持不变。
- 第三轮比较,最小值-1与21交换,序列变为-1, 13, 21, 32, 90。
- 第四轮比较,最小值-1与13交换,序列变为-1, 13, 21, 32, 90。
冒泡排序的C语言实现代码可以表示为:
```c
for(i = 1; i <= n - 1; i++) {
for(j = 0; j < n - i; j++) {
if(a[j] > a[j + 1]) {
med = a[j];
a[j] = a[j + 1];
a[j + 1] = med;
}
}
}
```
2. **选择排序**(Selection Sort):
选择排序的工作方式是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。例如,对于序列21, 13, 90, 32, -1,选择排序的过程如下:
- 第一轮比较,找到最小值-1,与21交换,序列变为-1, 13, 90, 32, 21。
- 第二轮比较,无需交换,序列保持不变。
- 第三轮比较,找到最小值21,与90交换,序列变为-1, 13, 21, 32, 90。
- 第四轮比较,无需交换,序列保持不变。
选择排序的C语言实现代码可以表示为:
```c
for(i = 0; i < n - 1; i++) {
p = i;
for(j = i + 1; j < n; j++) {
if(a[j] < a[p]) {
p = j;
}
}
med = a[p];
a[p] = a[i];
a[i] = med;
}
```
总结起来,冒泡排序每次比较后立即交换,可能交换n(n-1)/2次,而选择排序则是一轮比较后交换一次,最多交换n-1次。冒泡排序在最坏情况下效率较低,但其稳定性(相等的元素不会改变相对顺序)是它的优点。选择排序虽然效率较高,但它是不稳定的排序方法。在实际应用中,根据数据特点和性能需求,开发者会选用适合的排序算法。