冒泡排序
冒泡排序
排序是指将一个无序序列按某个规则进行排序。
冒泡排序的本质在于交换,即每次通过交换的方式把当前剩余元素的最大值移动到一端,而当剩余元素减少为0时,排序结束。
先来学习如何交换两个数。一般来说,交换两个数需要借助中间变量。
#include<stdio.h>
int main(){
int a = 1, b = 2;
int temp = a;
a = b;
b = temp;
printf("a = %d, b = %d\n", a, b);
return 0;
}
下面来实现冒泡排序,整个过程执行n-1趟,每一趟从左到右依次比较相邻的两个数。如果大的数在左边,则交换着两个数,当该趟结束时,该趟最大数被移动到当前剩余数的最右边。具体实现如下:
#include<stdio.h>
int main(){
int a[10] = {3, 1, 4, 5, 2};
for(int i = 1; i <= 4; i++){ //进行n+1趟比较
//第i趟时从a[0]到a[n-i-1]都与它们进行下一个数比较
for(int j = 0; j < 5-i; j++){ //进行到i趟的时候,一共要比较n-i次
if(a[j] > a[j+1]){//如果左边的数更大
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(int i = 0; i < 5; i++){//打印出a[i]
printf("%d", a[i]);
}
}