我的算法笔记(1)——冒泡排序
排序是指将一个无序序列按某个规则进行有序排列,而冒泡排序是排序算法中最基础的一种。现给出一个序列a,其中元素的个数为n,要求将他们按从小到大的顺序排序。
冒泡排序的本质在于交换,即每次通过交换的方式把当前剩余元素的最大值移动到一端,而当剩余元素减少为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;
输出结果:
a=2,b=1
然后来实现冒泡排序。从上面的例子可以发现,整个过程执行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 < n - i; j++)
{
if (a[j] > a[j + 1]) //如果左边的数更大,则交换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++)
{
printf("%d", a[i]);
}
return 0;
}
输出结果:1 2 3 4 5