概念
冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
动画演示
具体实现及使用
函数实现
变量exchange用来记录遍历的时候是否有进行交换
若没有进行交换的话,则说明数组内的数字已经是有序的了,不需要再排序了,因此后面的循环便没有意义了,所以在每次遍历后用变量exchange来跳出循环
void bubble_sort(int* arr, int len)
{
int i,j,tmp;
for (i = 0; i < len -1; i++)
{
int exchange = 0; //判断是否交换
for (j = 0; j < len -1-i; j++)
{
if (arr[j] > arr[j+1]) //交换
{
tmp = arr[j];
arr [j] = arr[j+1];
arr[j+1] = tmp;
exchange = 1; //记录交换
}
}
if (exchange == 0) //若没有交换,则退出循环
break;
}
}
代码实现
//使用冒泡排序,对数组arr[]={9,8,7,6,5,4,3,2,1,0}进行升序排列
#include <stdio.h>
void bubble_sort(int* arr, int len)
{
int i,j,tmp;
for (i = 0; i < len -1; i++)
{
int exchange = 0; //判断是否交换
for (j = 0; j < len -1-i; j++)
{
if (arr[j] > arr[j+1]) //交换
{
tmp = arr[j];
arr [j] = arr[j+1];
arr[j+1] = tmp;
exchange = 1; //记录交换
}
}
if (exchange == 0) //若没有交换,则退出循环
break;
}
}
void print(int* arr, int len)
{
int i = 0;
for (i = 0; i < len ; i++)
{
printf("%d,",arr[i]);
}
printf("\n");
}
int main()
{
int arr[] = { 9,8,5,6,7,4,0,2,1,3 };
int len = sizeof(arr) / sizeof(arr[0]);
bubble_sort(arr,len);
print(arr,len);
return 0;
}