转载请注明:http://blog.csdn.net/u011046042/article/details/75200358
基本思想
通过对相邻元素的比较和交换,使全部记录排列有序。
冒泡排序的过程
对每两个相邻的元素进行比较,若为逆序,则将两者交换,这样的操作反复进行,直至全部记录都比较、交换完毕为止。如此经过一趟冒泡排序之后,就将关键字最大(或最小)的元素安排在最后一个(或第一个) 元素的位置上。然后,对后n-1个元素重复进行同样的操作,则将具有次大(或次小)元素安排在倒数(或正数)第二个元素的位置上。重复以上过程,直至没有元素需要交换时为止。至此,整个序列的记录按关键字由小到大的顺序排列完毕。排序的步骤
第一步:令位置1和位置2的元素比较,若位置1的元素大,则交换
第二步:令位置2和位置3的元素比较,若位置2的元素大,则交换
第三步:令位置3和位置4的元素比较,若位置3的元素大,则交换
……外循环和内循环
原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或最小的数字被交换到了最后一位,然后再从头开始进行两两比较交换,直到倒数第二位时结束具体的C语言代码实现如下:
#include <stdio.h>
#define SIZE 11
int count =0;
void bubble_sort(int a[], int n);
void bubble_sort(int a[], int n)
{
int i, j, temp;
for (j = 0; j < n - 1; j++)
for (i = 0; i < n - 1 - j; i++)
{
if(a[i] > a[i + 1])
{
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
printf("a[0] = %d a[1] = %d a[2] = %d a[3] = %d a[4] = %d a[5] = %d a[6] = %d a[7] = %d a[8] = %d a[9] = %d a[10]= %d \n",
a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9],a[10]);
count++;
sleep(1);
}
}
}
int main()
{
int number[SIZE] = {10,9, 8, 7, 6, 5, 4, 3, 2,1,0};
int i;
bubble_sort(number, SIZE);
for (i = 0; i < SIZE; i++)
{
printf("%d\t", number[i]);
}
printf("count = %d \n",count);
}
结果如下:
算法复杂度
两层循环,外循环和内循环,算法复杂度O(n^2)。
转载请注明:http://blog.csdn.net/u011046042/article/details/75200358