算法——排序之冒泡排序优化
2014-10-28 16:21
211 查看
之前被某家公司面试问道:
问:知道冒泡排序吗?
答:知道啊。
问:写过吗?
答:写过啊。
问:那你知道冒泡排序优化吗?
答:知道一点……
哎……结果好像不满意……
今天我就来用Java写一下冒泡排序的一个优化方案,代码如下:
/**
* Created by Steven on 10/28/2014.
*/
public class BubbleSort {
public static void main(String[] args) {
int [] a={3,6,8,4,1,0,9,5,7,2};
for(int n: a){
System.out.print(n);
}
System.out.println();
sort(a);
for(int n: a){
System.out.print(n);
}
}
public static void sort(int [] a){
int len = a.length;
boolean flag = true;
while(flag){
flag = false;
for (int i=1;i<len;i++){
while(a[i-1] > a[i]){
int temp = a[i];
a[i] = a[i-1];
a[i-1] = temp;
flag = true;
}
}
len--;
}
}
}
其实从代码就能看到结果的差异了,用标志位flag 来判断 由于数值大小 两值有没有进行交换,没有的话直接逃出,跳到下一次循环。
这样就省去每一个数值进行比较的次数,显然可以达到优化了。
此算法是最简单的设计了,有什么更好的设计,望各位看官提出来进行交流……
问:知道冒泡排序吗?
答:知道啊。
问:写过吗?
答:写过啊。
问:那你知道冒泡排序优化吗?
答:知道一点……
哎……结果好像不满意……
今天我就来用Java写一下冒泡排序的一个优化方案,代码如下:
/**
* Created by Steven on 10/28/2014.
*/
public class BubbleSort {
public static void main(String[] args) {
int [] a={3,6,8,4,1,0,9,5,7,2};
for(int n: a){
System.out.print(n);
}
System.out.println();
sort(a);
for(int n: a){
System.out.print(n);
}
}
public static void sort(int [] a){
int len = a.length;
boolean flag = true;
while(flag){
flag = false;
for (int i=1;i<len;i++){
while(a[i-1] > a[i]){
int temp = a[i];
a[i] = a[i-1];
a[i-1] = temp;
flag = true;
}
}
len--;
}
}
}
其实从代码就能看到结果的差异了,用标志位flag 来判断 由于数值大小 两值有没有进行交换,没有的话直接逃出,跳到下一次循环。
这样就省去每一个数值进行比较的次数,显然可以达到优化了。
此算法是最简单的设计了,有什么更好的设计,望各位看官提出来进行交流……
相关文章推荐
- 【数据结构与算法】内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- 【数据结构与算法】内部排序之二:冒泡排序和选择排序(改进优化,附完整源码)
- 看数据结构写代码(2) 选择排序 和 冒泡排序 算法优化
- 常见算法:C语言中的排序算法--冒泡排序,选择排序,希尔排序
- 用JAVA实现排序算法之一:冒泡排序
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 算法不会,尚能饭否之排序——冒泡排序(bubble sort)
- 算法熟记-排序系列-冒泡排序
- 简单排序算法--冒泡排序
- 算法与数据结构——排序(二)冒泡排序(中)
- 【C#算法】冒泡排序 选择排序 插入排序 希尔排序--转
- 排序算法-对冒泡排序的优化改进算法
- 快速排序,冒泡排序,直接选择排序的算法
- 算法 - 排序 - 冒泡排序
- 数据结构与算法——三种基础排序算法C#实现(冒泡排序、选择排序、插入排序)
- 冒泡排序的优化算法
- 数据结构&算法实践—【排序|交换排序】冒泡排序及改进
- 数据结构&算法实践—【排序|交换排序】冒泡排序及改进
- 快速排序的算法优化要点
- 算法和数据结构---排序---冒泡排序