排序算法之冒泡排序

冒泡排序算法实现简介

一组数据的每一个都和它相邻的数据比较大小,例如a[i]与a[i+1]进行比较大小,然后将较大的那个数放到后面的位置。通过该过程,如果有N个数据,那个通过N-1次比较就能够将最大的数放到这组数据的最后面。然后对剩余的N-1个数据同样以类似于上面的步骤进行排序,那么最终会得到一组从小到大排列的数据。

程序设计思路

  • 将数据存放到数组里面,总共有N个数
  • 每一轮相邻两数(a[i]与a[i+1])进行大小比较,并将较大的数交换到i+1的位置,进行N-1次比较之后能够将最大的数交换到数组的最后位置
  • 对剩余的N-1个数重复进行步骤2,则在N-1次循环之后,就能够得到一组从小到大排列的数据。
  • 由以上分析可知,采用嵌套的二重for循环完成此次程序设计是最直接的设计思路。
  • 外层for循环控制总共需要比较的轮数。
    • 假设有N个数据,则总共需要N-1轮的比较
    • 循环结束条件为 i<N1
  • 内层for循环控制每一轮需要比较的次数。
    • 外层for循环每一轮的比较能将未排序数据的一个最大数放在这些未排序数据的最后,那么外层for循环进行到第i轮时,内层for循环只需要N-1-i次比较就能够实现交换出最大数并将其放在未排序数据的最后。
    • 循环结束条件为 j<N1i

程序实现

int a[N];
int i, j;
for(i=0;i
{
    for(j=0;j
    {
        if(a[j]>a[j+1])
        {
            a[j] ^= a[j+1];
            a[j+1] ^= a[j];
            a[j] ^= a[j+1];
        }
    }
}

该程序的时间复杂度为n(N^2)

你可能感兴趣的:(算法与数据结构,冒泡排序,排序算法,c语言)