冒泡排序及其优化
Posted 心迹背包客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了冒泡排序及其优化相关的知识,希望对你有一定的参考价值。
冒泡排序
冒泡排序是一种比较经典的排序方法。相对简单排序做了进一步的改善。
冒泡排序的原理:
通过对数组中相邻的值两两进行比较,将比较中得到的相对比较大的值交换到数值的前面,就像冒泡一样。
在冒泡排序的基础上,可以进一步的进行优化。
优化一:交换位置时,不采用中间临时变量进行交互。
优化二:采用标志位,当某一次遍历中发现无进行交互时,则证明该数组已经排序结束,可直接不对剩下未完成的比较进行遍历,直接结束。
优化三:采用头尾两段同时开始的方法
例如该例子中,采用普通的冒泡排序需要比较28次,但优化后的冒泡排序执行22次便完成所有的排序。
例子:
public class BubbleSort {
public static void main(String[] args) {
int[] values = new int[]{3,5,7,9,8,6,4,2};
// bubble_sort(values);
bubble_sort_optimized(values);
for (int i : values) {
System.out.print(i+",");
}
}
/ **
* 冒泡排序:
* 临近数据两两比较,按从大到小或从小到大排序
*
*
* @param values
*/
private static void bubble_sort(int[] values){
int temp;
for(int i = 0;i < values.length;i++){
for(int j = values.length -1;j > i;j--){
if(values[j]>values[j-1]){
temp = values[j];
values[j] = values[j-1];
values[j -1] = temp;
}
}
}
}
/ **
* 冒泡排序优化:引入判断标志位
* 优化一:不引入临时变量作为交换变量
* 优化二:引入标志位,当发现一个遍历中并没进行交换,说明该排序已经完全排序好了
*
* @param values
* /
private static void bubble_sort_optimized_isSort(int[] values){
boolean isSort = true;
for(int i = values.length -1;i > 0;i--){
isSort = true;
for(int j = 0;j < i;j++){
if(values[j] < values[j+1]){
Swap(values, j);
isSort = false;
}
}
if(isSort)
break;
}
}
/ **
* 冒泡排序优化:引入索引标志位
* 优化一:通过引入索引标志位
* 以pos为索引设为最大值,当pos发生改变后,则为冒泡的位置,若未发生改变,则代表排序已经结束
*
* @param values
*/
private static void bubble_sort_optimized_pos(int[] values){
for(int i = 0; i > values.length-1 ;){
for(int j = values.length -1; j> i;j--){
int pos = values.length;
if(values[j] < values[j+1]){
pos = j;
Swap(values, j);
}
i = pos;
}
}
}
/ **
* 冒泡排序优化:头尾两边同时进行
* 优化一:头尾两边同时进行排序,节省重新来回查找时间。
*
* @param values
*/
private static void bubble_sort_optimized_beginEnd(int[] values){
int iBegin = 0;
int iEnd = values.length -1;
while(iBegin < iEnd){
for(int i = iBegin;i<</span>iEnd-1;i++){
if(values[i] < values[i+1]){
Swap(values, i);
}
}
iBegin++;
for(int i = iEnd-1; i>iBegin;i--){
if(values[i] < values[i+1]){
Swap(values, i);
}
}
iEnd--;
}
}
private static void Swap(int[] values, int j) {
values[j] += values[j+1];
values[j+1] = values[j] - values[j+1];
values[j] = values[j] - values[j+1];
}
}
以上是关于冒泡排序及其优化的主要内容,如果未能解决你的问题,请参考以下文章