数据结构与算法分析之冒泡排序(Bubble Sort)学习

冒泡排序(英语:Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

冒泡排序算法描述:
1、比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2、对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
3、针对所有的元素重复以上的步骤,除了最后一个。
4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

一、 冒泡排序源码

#include <stdlib.h>
#include <time.h>

#define NUM 10

// 冒泡排序函数实现
void bubble_sort(int a[], int n)
{
	for(int i=0; i<n-1; i++)
	{
		for(int j=0; j<n-1-i; j++)
		{
			if(a[j]>a[j+1])
			{
				int temp = a[j];
				a[j] = a[j+1];
				a[j+1] = temp;
			}
		}
	}
}

int main(void)
{
	int array[NUM];
	
	srand((unsigned int)time(NULL));
	
	// 给数组赋随机值
	for(int i=0; i<NUM; i++)
	{
		array[i] = rand()%100;
	}
	
	// 打印排序前数组
	for(int i=0; i<NUM; i++)
	{
		printf("%5d", array[i]);
	}
	
	printf("\n");
	
	// 冒泡排序
	bubble_sort(array, NUM);
	
	// 打印排序后数组
	for(int i=0; i<NUM; i++)
	{
		printf("%5d", array[i]);
	}
	
	printf("\n");
	
	return 0;
}

二、 运行结果

[ycxie@fedora Workspace]$ gcc bubble_sort.c -o bubble_sort -Wall
[ycxie@fedora Workspace]$ ./bubble_sort
   49   28   38   73   52   89   13    6   76   95
    6   13   28   38   49   52   73   76   89   95
[ycxie@fedora Workspace]$ ./bubble_sort
   50   61   29   22   76   82   92   86    2   98
    2   22   29   50   61   76   82   86   92   98
[ycxie@fedora Workspace]$ ./bubble_sort
   82   48    2   21   89   56   18   14    2   88
    2    2   14   18   21   48   56   82   88   89
[ycxie@fedora Workspace]$ ./bubble_sort
   98   31   12   25   57   92   57    1   88    9
    1    9   12   25   31   57   57   88   92   98
[ycxie@fedora Workspace]$ ./bubble_sort
   22   51   17   82   12   24   90   66   29   56
   12   17   22   24   29   51   56   66   82   90

Leave a Reply

Your email address will not be published. Required fields are marked *