请写出一旦没有交换就提前结束排序的冒泡排序算法。c语言
时间: 2024-03-11 14:50:09 浏览: 36
C语言实现的冒泡排序算法
冒泡排序是一种简单的排序算法,但是当待排序数组已经有序时,仍然需要进行不必要的比较和交换操作。为了优化冒泡排序,在一轮排序后,如果没有进行交换操作,说明待排序数组已经有序,可以提前结束排序。
以下是一旦没有交换就提前结束排序的冒泡排序的C语言实现:
```c
void bubble_sort(int arr[], int n) {
int i, j, tmp, flag;
for (i = 0; i < n - 1; i++) {
flag = 0; // 标记本轮是否进行了交换操作
for (j = 0; j < n - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag = 1;
}
}
if (flag == 0) { // 如果本轮没有进行交换操作,提前结束排序
break;
}
}
}
```
其中,`arr`为待排序数组,`n`为数组长度。在每一轮排序开始前,将标记`flag`初始化为0,表示本轮还没有进行交换操作。在每次交换操作时,将`flag`置为1。在一轮排序结束后,如果`flag`仍然为0,说明本轮没有进行交换操作,即数组已经有序,可以提前结束排序。
阅读全文