#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
//冒泡升序排列
void bubble_sort(int* arr, int len) {
for (int i = 0; i < len - 1; i++) {//10个元素要进行9次冒泡排序
for (int j = 0; j < len - 1 - i;j++) {//每次冒泡排序需要进行len-1-i次
int tmp = 0;
if (arr[j] > arr[j + 1]) {
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}
int main() {
int arr[] = { 9,8,7,6,5,4,2,1,3,0 };
int len = sizeof(arr) / sizeof(int);
bubble_sort(arr, len);
for (int k = 0; k < 10; k++) {
printf("%d\n",arr[k]);
}
return 0;
}
效率很低,例如输入数组为{1,2,3,4,5,6,7,8,9}时依旧要一次一次比较
改进:
void bubble_sort(int* arr, int len) {
for (int i = 0; i < len - 1; i++) {//10个元素要进行9次冒泡排序
int flag=1//假设数组排列已经有序
for (int j = 0; j < len - 1 - i;j++) {//每次冒泡排序需要进行len-1-i次
int tmp = 0;
if (arr[j] > arr[j + 1]) {
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
flag=0;//发生排序则置为0
}
}
if(flag==1){
break;
}
}
}