算法练习---冒泡排序

转载请注明: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);
}

猜你喜欢

转载自blog.csdn.net/u011046042/article/details/75200358