【算法基础】冒泡排序
2013-12-05 00:32
190 查看
1. 算法描述
冒泡排序(Bubble Sort)是一种简单的排序方法,它重复地走访要排序的数列,每次比较两个元素,如何顺序错误则把它们交换过来;
冒泡排序的算法步骤如下:
比较相邻的元素,若第一个比第二个大,就交换他们两个;
对每一对相邻的元素做同样的工作,从开始第一对到结尾的最后一对;交换后,最后的元素应该是最大的;
针对所有的元素,重复上面的步骤,除了最后一个;
持续对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较为止;
2. 算法实现
2.1. 基本实现:
2.2. 使用标志的冒泡排序:
描述:设置一个标志,如果一趟排序发生了交换,则设为true,否则为false;如果一趟排序没发生交换,则说明排序完成;
2.3. 记录每趟排序最后交换的位置
描述:每趟排序记录下最后发生交换的位置,则后面的元素已经排好序了;下一趟只需比较到上一次记录的发生交换的位置即可;
冒泡排序(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; } } } }
相关文章推荐
- 基础算法(三)---冒泡排序(Java)
- 基础算法——冒泡排序
- 【基础算法】选择排序与冒泡排序
- 基础算法--排序: 之冒泡排序
- 数据结构与算法——三种基础排序算法C#实现(冒泡排序、选择排序、插入排序)
- 基础算法之一 冒泡排序的三种实现
- 算法基础-冒泡排序
- python实现基础排序算法之(冒泡排序)
- 基础算法系列(二)——冒泡排序
- 基础算法之排序(1)--冒泡排序 改进
- 算法基础之排序篇-冒泡排序
- java 算法基础之六插入排序与冒泡排序
- 排序算法---基础算法(冒泡排序,快速排序,选择排序,直接插入排序,桶排序)
- 基础算法2——冒泡排序和快速排序
- *《java基础算法——冒泡排序》
- C#算法基础之冒泡排序
- 基础算法之排序(1)--冒泡排序
- 【算法基础】冒泡排序
- 基础算法 冒泡排序
- 基础算法之四--排序: 之冒泡排序