常用的排序算法主要包括:
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;i<arr.length-1;i++) { for(int j=0;j<arr.length-1-i;j++) { if(arr[j]>arr[j+1]) { temp=arr[j+1]; arr[j+1]=arr[j]; arr[j]=temp; } } System.out.println("第["+(i+1)+"]轮,排序结果:"+Arrays.toString(arr)); } } }
- 排序结果:
第[1]轮,排序结果:[29, 45, 12, 64, 6, 98]
第[2]轮,排序结果:[29, 12, 45, 6, 64, 98]
第[3]轮,排序结果:[12, 29, 6, 45, 64, 98]
第[4]轮,排序结果:[12, 6, 29, 45, 64, 98]
第[5]轮,排序结果:[6, 12, 29, 45, 64, 98]
通过分析我们可以得到冒泡排序的时间复杂度为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;i<arr.length-1;i++) { flag=0; for(int j=0;j<arr.length-1-i;j++) { if(arr[j]>arr[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)); } } }
- 排序结果:
第[1]轮,排序结果:[10, 23, 32, 45, 66, 88]
转载于:https://blog.51cto.com/13733462/2113168