在c语言中实现冒泡排序:
简介:“冒泡”这个名字的由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。冒泡排序应该是最常见的排序方法了,c语言初学者一定要学会使用。
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。
核心思想:两两相邻元素进行比较。冒泡排序的基本思想就是不断比较相邻的两个数,让较大的元素不断地往后移。经过一轮比较,就选出最大的数;经过第2轮比较,就选出次大的数,以此类推。
具体排序如下:
对于具有N个元素的数组R[n],进行最多N-1轮比较;
int arr[9] = {1,43,8,71,32,90,45,12,41};
我们的任务就是将上述9个数字排列成我们想要的升序
这组数据升序就一定避免不了要进行交换,每次两两比较以后都会进行一次交换
如何实现交换呢?其实很简单先贴代码:
if (arr[j + 1] < arr[j])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
两个数把他想象成一瓶是酱油一瓶是醋,你手上一瓶酱油一瓶醋如何让他们交换瓶子呢?我们只要在拿出一个空瓶子就能很好的解决这个问题,把酱油放入空瓶然后将醋倒入酱油瓶,最后将酱油瓶倒入空瓶就完成了。上述代码便是依靠这样得原理实现的。
其次:
解决完交换的问题以后我们就应该要思考如何让代码跑起来让每次比较都能够进行连续的升序
前面讲过,对于具有N个元素的数组R[n],进行最多N-1轮比较;在第一次for循环中我们给出的9组数据一共要进行八次比较,第二次循环中,我们每进行一次比较后就有一个数据已经完成了,故第一次循环中进行比较的数字在后续中就可以不再进行比较(因为它已经和每个数字都比过了)。
int main() {
int arr[9] = {1,43,8,71,32,90,45,12,41};
int i = 0;
int tmp = 0;
int j = 0;
for(i = 0; i < 8; i++)//9组数据每次两两比较一共要进行8次
{
for(j= 0;j<8-i;j++)//每次比较完后,下一组的比较都比上一次比较要少一次(8-i)
{
if (arr[j + 1] < arr[j])
{
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
最后:
如果你还想打印出来看看实际的升序结果可以加入以下代码:
for (int z = 0; z < 9; z++)
{
printf("%d\n",arr[z]);
}
打印出来的结果如下: