冒泡可以向前“冒”,即每次交换都是从记录集的最后开始,将最小记录“冒”到最前面。请用C语言写出这种冒泡的子程序
时间: 2023-09-08 11:12:10 浏览: 33
以下是用C语言实现的向前冒泡排序的子程序:
```c
void bubbleSort(int arr[], int n) {
for (int i = n - 1; i > 0; i--) {
for (int j = n - 1; j > n - i - 1; j--) {
if (arr[j] < arr[j - 1]) {
int temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
}
```
其中,`arr`为待排序的数组,`n`为数组的长度。内层循环从最后一个元素开始,逐个与其前一个元素比较,如果后一个元素比前一个元素小,则交换它们的位置。外层循环控制排序次数,每次排序都可以将当前未排序部分的最小值“冒泡”到最前面。
相关问题
如果最大的数在数组中间,如何用冒泡排序法将它排到最后
可以使用冒泡排序法,从数组的第一个元素开始,依次比较相邻的两个元素,如果前一个元素比后一个元素大,则交换它们的位置,直到最大的数被排到了最后一个位置。具体的实现方法可以参考以下代码:
```c
void bubble_sort(int arr[], int n) {
int i, j;
for (i = 0; i < n - 1; i++) {
for (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;
}
}
}
}
```
其中,arr[] 表示待排序的数组,n 表示数组的长度。
对于n个记录的集合进行冒泡排序,在最坏情况下需要的时间是O(n 2 )。
这是一个正确的陈述。冒泡排序是一种基于比较的排序算法,其基本思想是通过相邻元素之间的比较和交换来将待排序元素中较大的数往后移动。在最坏情况下,即待排序元素按照降序排列,每次比较都需要交换相邻的两个元素。在这种情况下,冒泡排序需要进行 n-1 轮比较,每轮比较需要比较 n-i 次,总的比较次数为 (n-1)*(n-2)/2,即 O(n^2)。因此,在最坏情况下,冒泡排序需要的时间复杂度是 O(n^2)。