王晓斌的专栏

Take honour from me and my life is undone.

【算法基础】冒泡排序

1. 算法描述

冒泡排序(Bubble Sort)是一种简单的排序方法,它重复地走访要排序的数列,每次比较两个元素,如何顺序错误则把它们交换过来;


冒泡排序的算法步骤如下:

  1. 比较相邻的元素,若第一个比第二个大,就交换他们两个;
  2. 对每一对相邻的元素做同样的工作,从开始第一对到结尾的最后一对;交换后,最后的元素应该是最大的;
  3. 针对所有的元素,重复上面的步骤,除了最后一个;
  4. 持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止;



2. 算法实现

2.1. 基本实现:

/**
 * @param array 
 * @param n the size of array
 */
void bubbleSort(int array[], int n)
{
    for (int i = 0; i < n; i++)
    {
	 for (int j = 1; j < n - i; j ++)
	 {
	     if (array[j - 1] > array[j])
	     {
		 swap(array[j - 1], array[j]);
	     }
	 }
    }
}

2.2. 使用标志的冒泡排序:

描述:设置一个标志,如果一趟排序发生了交换,则设为true,否则为false;如果一趟排序没发生交换,则说明排序完成;

/**
 * @param array 
 * @param n the size of array
 */
void bubbleSort(int array[], int n)
{
   bool flag = true;
   int k = n;
   
   while (flag)
   {
       flag = false;
	   
       for (int i = 1; i < k; i++)
       {
           if (array[i -1] > array[i])
	   {
               swap(array[i - 1], array[i]);
	       flag = true;
	   }
       }
	   
       k--;
   }
}

2.3. 记录每趟排序最后交换的位置

描述:每趟排序记录下最后发生交换的位置,则后面的元素已经排好序了;下一趟只需比较到上一次记录的发生交换的位置即可;

/**
 * @param array 
 * @param n the size of array
 */
void bubbleSort(int array[], int n)
{
   int flag = n; // the index of stopping checking
   int k = n;
   
   while (flag > 0)
   {
       k = flag;
	   
       for (int i = 1; i < k; i++)
       {
	   if (array[i -1] > array[i])
	   {
               swap(array[i - 1], array[i]);
               flag = i;
           }
       }
   }
}



阅读更多
个人分类: 数据结构&算法
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

【算法基础】冒泡排序

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭