您的位置:首页 > 其它

【算法基础】冒泡排序

2013-12-05 00:32 190 查看
1. 算法描述

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

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

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



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;
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: