Java_基础之数组排序(从小到大)
1、冒泡排序:
冒泡排序可以写成两层循环。
每次循环将最大的数值交换到数组的最后一个。
每排序完一次,后面就少比较一次。所以二层循环的判断条件写成:arry.length-1-i
2、选择排序:
选择排序可以写成两层循环。
每次排序会选择出数组中最小的数,将其交换到数组的第一位。
平均时间复杂度都是:O(n^2)
冒泡排序稳定,选择排序不稳定。
Java里面有一个自动排序的函数:Arrays.sort();
手写排序,让我们更好的理解算法,这两个排序为最简单的排序算法 。
想找一份好的工作和工资比较高的,就要好好学好算法。
以下将是数组排序的代码:
1 /* 2 * Java的简单数组排序(从小到大) 3 * 1、冒泡排序 4 * 2、选择排序 5 * 平均时间复杂度都是:O(n^2) 6 * 冒泡排序稳定,选择排序不稳定。 7 */ 8 package com.basis; 9 10 public class ArraySort { 11 12 public static void main(String[] args) { 13 int[] arry = {1,9,7,25,15,36,99,100,85,45,20,10,3}; //数组初始化 14 System.out.print("原始数组:"); 15 Print(arry); 16 System.out.print(" 冒泡排序:"); 17 Print(BubbleSort(arry)); 18 System.out.print(" 选择排序:"); 19 Print(SelectionSort(arry)); 20 System.out.print(" 改进的选择排序:"); 21 Print(SelectionSortChange(arry)); 22 } 23 24 //冒泡排序 25 public static int[] BubbleSort(int arry[]){ 26 for(int i=0;i<arry.length-1;i++){ 27 for(int j=0;j<arry.length-1-i;j++){ 28 if(arry[j]>arry[j+1]){ //交换过程 29 int temp = arry[j]; 30 arry[j] = arry[j+1]; 31 arry[j+1] = temp; 32 } 33 } 34 } 35 return arry; 36 } 37 38 //选择排序 39 public static int[] SelectionSort(int arry[]){ 40 for(int i=0;i<arry.length;i++){ 41 for(int j=i;j<arry.length;j++){ 42 if(arry[i]>arry[j]){ //交换过程 43 int temp = arry[i]; 44 arry[i] = arry[j]; 45 arry[j] = temp; 46 } 47 } 48 } 49 return arry; 50 } 51 52 /* 53 * 改进: 54 * 先判断,若符合,先不要立刻去交换两个数,把小的那个数组的数下标存起来, 55 * 全部比较完再交换,每次循环只需要交换一次或着不交换 56 */ 57 //改进的选择排序 58 public static int[] SelectionSortChange(int arry[]){ 59 for(int i=0;i<arry.length;i++){ 60 int index=i; //标记数组下标 61 for(int j=i;j<arry.length;j++){ 62 if(arry[index]>arry[j]){ //每一次循环找出数组的值为最小的下标 63 index=j; 64 } 65 } 66 if(index != i){ 67 int temp = arry[index]; 68 arry[index] = arry[i]; 69 arry[i] = temp; 70 } 71 } 72 return arry; 73 } 74 75 //数组的输出 76 public static void Print(int arry[]){ 77 for(int i=0;i<arry.length;i++){ 78 System.out.print(arry[i]+" "); 79 } 80 } 81 }
运行的结果: