Java 中常见的排序算法

其实小编是不太想写关于Java的相关文章,因为是这个编程语言实在是会用的人太多了,网上的博文数不胜数,没必要在重复造轮子了,但是虽然java这门语言会用的人很多,但是会用、掌握、熟练、和精通可不是闹着玩的,想要达到精通的级别,小编敢说,一个正规的开发公司能过达到精通java的开发人员屈指可数,所以小编这里就跳过关于java哪些简单的API 、语法,直接给大家介绍一些相对提升能力,并且不是那么基础的知识,说不定以后面试就会用到,尤其是排序,真的,不晓得为啥都喜欢在面试的时候出排序的题,实际大数据开发中真正手写排序的还真不多,我想可能是各个面试官想要看到的是,各个应聘者是否能够get到排序算法的精髓吧。

好了,每次写博客都要废话一堆,自我检讨,但是不想改变,接下来小编介绍几种创建的排序算法以及他们的Java实现。

1. 冒泡排序

  原理:从第一个元素开始,和它相邻的比较,如果前面一个元素大于后面一个元素,就把他们互换位置。
  原理图:

Java  中常见的排序算法


   代码实现:

public static void main(String[] args) { int arr[] = { 15, 16, 145, 91, 9, 5, 0 }; int temp1=0; for(int i=0;i<arr.length-1;i++){ //控制循环次数:arr.length-1 for(int j=0;j<arr.length-i-1;j++){ //控制比较次数:arr.length-i-1 if(arr[j]>arr[j+1]){ temp1=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp1; } } } }

   增强版冒泡排序:

public static void main(String[] args) { int arr[] = { 1,0,2,3,4,5,6,7,8 }; int temp1; for(int i=0;i<arr.length-1;i++){ //控制循环次数:arr.length-1 boolean flag=true; //判断内层循环是否执行 for(int j=0;j<arr.length-i-1;j++){ //控制比较次数:arr.length-i-1 if(arr[j]>arr[j+1]){ temp1=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp1; flag=false; } } if(flag){ //如果内层循环的if一次都没有执行,说明已经排序结束 break; } } 2.选择排序

  原理:从第一个位置开始,将他与后面的所有元素比较,如果前面大于后面的,就交换位置。
  原理图:

Java  中常见的排序算法


  代码实现:

public static void main(String[] args) { int arr[] = { 45,15,48,9,3,65,22 }; for(int i=0;i<arr.length-1;i++){ //控制位置,从第一个位置开始,到倒数第二个位置 for(int j=i+1;j<arr.length;j++){ //当前位置的下一个位置开始,与后面的所有比较 if(arr[i]>arr[j]){ int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } 3. 插入排序

  原理:从第二个元素位置开始,将他与他之前的元素比较,如果比之前的元素小,就将他插入到,那个元素的前面。
  原理图:

Java  中常见的排序算法


  代码实现:

public static void main(String[] args) { int arr[] = { 45, 15, 48, 9, 3, 65, 22 }; // 插入排序 int temp1; for (int i = 1; i < arr.length; i++) { //从第二个数开始,一直到最后一个数 for (int j = 0; j < i; j++) { //i之前的所有数,全部比较 if (arr[i] < arr[j]) { temp1 = arr[i]; for (int k = i; k > j; k--) { //将前面的数据把后面的覆盖,从j开始,一直到i arr[k] = arr[k - 1]; } arr[j] = temp1; } } } 4. 快速排序

  原理:先选取一个基准点,作用:基准点左侧小于基准点的数据 基准点右侧放的数据都是大于基准点的数据。基准点:最常用的基准点选第一个,最终一个大数组不停的进行查分 拆分的最终结果每个数组只有一个元素。
  原理图:

Java  中常见的排序算法


解释:大循环中有两个循环,一个是从右往左,找比基准点小的,一个是从左往右找比基准点大的(找到之后,与基准点交换位置)。最终大循环,在left>=right时结束。
(2) 快排拆分:

Java  中常见的排序算法


解释:使用递归的方式,将数组左右两边一次次拆分,直到left>=right时,递归结束。
  代码实现:

public class QuickSort { public static void main(String[] args) { int arr[]= {2,7,1,2,8,1,3,9,415,189,123}; sort(arr,0,arr.length-1); System.out.println(Arrays.toString(arr)); } public static void sort(int [] arr,int left ,int right) { //递归的出口,当左侧==右侧 if(left>=right) { return; } //获取基准点 int point=getPoint(arr,left,right); //左边排序(递归) sort(arr,left,point-1); //右边排序(递归) sort(arr,point+1,right); } public static int getPoint(int [] arr,int left ,int right) { int key=arr[left]; while(left<right) { //从右向左循环,只要右边的比基准点大,就继续循序 while(key<=arr[right]&&left<right) { //每循环一次,right的索引向左移一个 right--; } //交换基准点的位置 arr[left]=arr[right]; //从左向右循环,只要左边的比基准点小,就继续循序 while(arr[left]<=key&&left<right) { left++; } //交换基准点 arr[right]=arr[left]; } //最后给基准点赋值 arr[left]=key; return left; } }

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/9a2b7ab9ffebf6d6c4ce6299080ece8b.html