排序算法 之 (冒泡排序)
10.3、冒泡排序
从后往前依次比较两个元素,如果后面小于前面就交换,每次都会寻找到其中最小的那个元素放到前面
冒泡排序图解
冒泡排序的C代码实现
#include <stdio.h>
#include <stdlib.h>
#define boolean int
#define false 0;
#define true 1;
//冒泡排序:nums:待排序数组,length:数组长度
boolean BubbleSort(int nums[],int length){
if(length == 0) return false;//数组为空,不需要排序
for(int i = 0; i < length-1;i++){
boolean flag = false;//用来标记是否已经排好序了
for(int j = length-1;j > i;j--){
if(nums[j] < nums[j-1]){//如果后面的比前面小就交换
int temp = nums[j];
nums[j] = nums[j-1];
nums[j-1] = temp;
flag = true;
}
}
if(!flag){//如果这次交换一次都没有发现表示已经排好序了,就直接退出
return true;
}
}
}
int main(){
int nums[] = {49,38,65,97,76,13,27,49};
int length = 8;
printf("直接插入排序前:");
for(int i = 0; i < length ;i++){
printf("%d ",nums[i]);
}
BubbleSort(nums,length);
printf("\n");
printf("直接插入排序后:");
for(int i = 0; i < length ;i++){
printf("%d ",nums[i]);
}
return 0;
}
//结果:
直接插入排序前:49 38 65 97 76 13 27 49
直接插入排序后:13 27 38 49 49 65 76 97