冒泡排序的核心就是将大的数值往后面放,具体来说:
第一遍循环时从数组的第一个元素依次和后面的元素做对比,如果数组下标小的元素大于数组下标大的元素,将它们的值对调,一直到最大的元素移到了数组的最后位置,后面的操作便不对比此位置的下标,在代码中体现出来是控制第二层循环的条件 j < size -1-i 。
下一轮循环时,也是从第一个元素开始对比,但是本轮结束是将第二大的元素移到数组倒数第二个位置。
后面依次进行同样的操作,直到结束循环,最后整个数组的元素就是从小到大的排好序。
#include <stdio.h>
void bubble_sort(int arr[],int size){
for(int i = 0;i < size-1;i++) //控制第几轮排序
for(int j = 0;j < size-1-i;j++){ //依次进行对比
if(arr[j] > arr[j+1]){
int temp = arr[j]; //交换元素
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
int main(int argc,char *argv[])
{
int arr[] = {3,5,6,8,4,7};
int size = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr,size);
printf("冒泡排序后的数组:");
for(int i = 0;i < size;i++)
printf("%d ",arr[i]);
printf("\n");
}
最后运行结果为: