JAVA中的数组排序算法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JAVA中的数组排序算法相关的知识,希望对你有一定的参考价值。
1.各种排序图解:
代码实现
1 import java.util.Arrays; 2 3 public class ArraySort { 4 //选择排序 5 public static void slecteSort(int[] arr){ 6 System.out.println(Arrays.toString(arr)); 7 for(int i=0;i<arr.length;i++){ 8 int minIndex=i; 9 for(int j=i+1;j<arr.length;j++){ 10 if(arr[minIndex]>arr[j]){ 11 minIndex=j; 12 } 13 } 14 if(minIndex!=i){ 15 int temp=arr[i]; 16 arr[i]=arr[minIndex]; 17 arr[minIndex]=temp; 18 } 19 } 20 System.out.println(Arrays.toString(arr)); 21 } 22 //冒泡排序 23 public static void bubSort(int[] arr){ 24 for(int i=0;i<arr.length-1;i++){ //控制比较次数:n-1次(n表示元素个数) 25 /* 26 * 控制相邻的两个元素比较,如果说后者小,就进行交换。 27 * 因为每次外循环之后,都会找到一个最大值放在最后面 28 * 所以说j能取到的最大值,应该依次减小。(j<arr.length-1-i) 29 */ 30 for(int j=0;j<arr.length-i-1;j++){ 31 if(arr[j]>arr[j+1]){ 32 int b=arr[j+1]; 33 arr[j+1]=arr[j]; 34 arr[j]=b; 35 } 36 System.out.println("arr第"+(i+1)+"次外循环,第"+(j+1)+"次比较后:"+Arrays.toString(arr)); 37 } 38 } 39 System.out.println(Arrays.toString(arr)); 40 } 41 //插入排序 42 public static void insertSort(int[] arr){ 43 44 for(int i=1;i<arr.length;i++){ 45 /* 46 * 因为第一个拿出来要作比较的数,前面必须要有数,所以i从1开始 47 */ 48 int temp=arr[i]; //temp 临时数据 49 int index=0; 50 /* 51 * j一定要从外循环去除到temp数的前一个开始,一直往前面遍历,如果一直找不到比去除到temp数小的数,就到 52 * j==-1的时候结束。 53 * 否则,到找到比temp里面数还要小的数结束 54 */ 55 for(int j=i-1;j>=-1;j--){ 56 index++; 57 System.out.println("arr第"+i+"次外循环,第"+index+"次比较"+Arrays.toString(arr)); 58 if(j==-1){ //如果找到最前面的没有元素可找了,就把temp放入到最前面的arr[0]; 59 arr[0]=temp; 60 break; 61 } 62 if(temp<arr[j]){ 63 arr[j+1]=arr[j]; //如果找到的元素比temp大,就往后面走一位 64 }else{ 65 arr[j+1]=temp; //如果找到元素比temp小,就在该数后面放入temp 66 break; //并跳出本次循环 67 } 68 } 69 } 70 } 71 //递归算法——阶乘,世纪的计算过程是从最后一步开始计算 72 public static void factorial(int b){ 73 int a=1; 74 for (int i=1;i<=b;i++) { 75 a*=i; 76 } 77 System.out.println(a); 78 } 79 public static int factorial1(int i){ 80 while(i!=1){ 81 System.out.println(i+"x"+(i-1)+"!"); 82 return factorial1(i-1)*i; 83 } 84 return 1; 85 } 86 // 87 public static void merge(int[] arr,int left,int mid,int right){ 88 int[] temp=new int[right-left+1]; 89 int low1=left; 90 int low2=mid+1; 91 int index=0; 92 while(low1<=mid&&low2<=right){ 93 if(arr[low1]<arr[low2]){ 94 temp[index++]=arr[low1++]; 95 }else { 96 temp[index++]=arr[low2++]; 97 } 98 } 99 while(low1<=mid){ 100 temp[index++]=arr[low1++]; 101 } 102 while(low2<=right){ 103 temp[index++]=arr[low2++]; 104 } 105 System.out.println("left="+left); 106 System.out.println("arr="+Arrays.toString(arr)); 107 for(int i=0;i<index;i++){ 108 arr[left++]=temp[i]; 109 } 110 System.out.println("temp="+Arrays.toString(temp)); 111 System.out.println("arr"+Arrays.toString(arr)); 112 System.out.println("==================================="); 113 } 114 //递归的拆分一个数组 115 public static void cai(int[] arr,int left,int right){ 116 int mid=(right+left)/2; 117 if(left<right){ 118 cai(arr,left,mid); 119 cai(arr,mid+1,right); 120 merge(arr,left,mid,right); 121 } 122 System.out.println(Arrays.toString(arr)); 123 }
以上是关于JAVA中的数组排序算法的主要内容,如果未能解决你的问题,请参考以下文章