本文共 1581 字,大约阅读时间需要 5 分钟。
常用的排序算法主要包括:
1、插入排序 直接插入排序 希尔排序2、交换排序 冒泡排序 快速排序3、选择排序 简单选择排序 堆排序 快速排序 4、归并排序
其中,冒泡排序算是最简单的一种排序算法
排序思想:
对一组数字进行从小到大或者从大到小的进行排序。
它是通过让相邻的两个元素进行比较,大的元素向下沉,小的元素向上冒arr[0]与arr[1]进行比较,如果前者大于后者,则交换位置然后arr[1]与arr[2]进行比较,以此类推。当进行到n-1轮后,排序完成。public class Bubble {public static void main(String[] args) { int arr[]= {29,45,64,12,98,6}; int temp=0; for(int i=0;iarr[j+1]) { temp=arr[j+1]; arr[j+1]=arr[j]; arr[j]=temp; } } System.out.println("第["+(i+1)+"]轮,排序结果:"+Arrays.toString(arr)); }}}
通过分析我们可以得到冒泡排序的时间复杂度为O(n^2),假如现在存在这种情况,存在一个数组,现在已经是有序的数据,如果使用冒泡排序同样需要O(n^2)的时间复杂度,这时我们需要对冒泡排序进行优化。
优化思路:
假如在第1轮比较当中,发现所有的元素都没有进行交换,则说明此原数据就是有序的,不需要再进行排序。public class BubbleOptimization {public static void main(String[] args) { int arr[]= {10,23,32,66,45,88}; int temp=0; int flag=0; for(int i=0;iarr[j+1]) { temp=arr[j+1]; arr[j+1]=arr[j]; arr[j]=temp; //如果有交换的行为,则flag=1 flag=1; } } //说明上面 内for循环中,没有交换任何元素。 if(flag==0) { break; } System.out.println("第["+(i+1)+"]轮,排序结果:"+Arrays.toString(arr)); }}}
转载于:https://blog.51cto.com/13733462/2113168