C语言探索:选择、冒泡与快速排序代码详解及比较

0 下载量 155 浏览量 更新于2024-08-29 收藏 180KB PDF 举报
本资源提供了一个C语言代码示例,详细讲解了三种基本的排序算法:冒泡排序、选择排序和快速排序。首先,我们来看冒泡排序。冒泡排序通过两层嵌套循环,外层控制遍历次数,内层比较相邻元素并交换位置,使得每次遍历都将未排序部分的最大元素“冒”到序列末尾。关键代码如下: ```c void maopao(int a[], int len){ int i, j, temp; for (i = 0; i < len - 1; i++) { // 从第一个到倒数第二个 for (j = 0; j < len - 1 - i; j++) { // 排在后的是已排序的 if (a[j] > a[j + 1]) { // 大的数换到后面去 temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } } ``` 选择排序则是通过遍历未排序部分,找到最小(或最大)的元素并将其放置在正确的位置。它使用两个变量`t`和`temp`来跟踪当前未排序部分的最小值索引: ```c void xuanze(int a[], int len){ int i, j, t, temp; for (i = 0; i < len - 1; i++) { t = i; for (j = i + 1; j < len; j++) { // 前面已排好的 if (a[t] > a[j]) { t = j; // 记下该趟最小数的序号 } } if (t != i) { // 如果序号改变 temp = a[t]; // 元素交换 a[t] = a[i]; a[i] = temp; } } } ``` 最后,快速排序是一种高效的排序算法,它采用分治策略,通过选择一个基准值(通常是第一个或最后一个元素),将数组分为两部分,一部分的所有元素都小于基准,另一部分都大于基准,然后递归地对这两部分进行排序。快速排序的关键在于`qSort`函数: ```c void qSort(int a[], int low, int high){ int temp; int mid = low; // 定义中值索引 int right = high; // 右边界 while (right > mid) { // 从右向左扫描 if (a[right] < a[mid]) { // 比较并交换 temp = a[mid]; a[mid] = a[right]; a[right] = temp; } // 移动基准到正确位置 while (a[mid] < a[right]) { mid++; } // 将小于基准的元素交换到左边 if (mid < right) { temp = a[mid]; a[mid] = a[right]; a[right] = temp; } } } ``` 在`main`函数中,作者提供了数组`inta[]`的示例,并调用了`xuanze`函数进行选择排序。这三种排序算法各有优缺点,冒泡排序简单但效率较低,选择排序和快速排序虽然复杂度相对较好,但快速排序的平均性能优于选择排序。通过这些代码示例,读者可以理解并掌握C语言实现不同排序算法的基本步骤。