1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| package com.day02;
import java.util.Arrays;
/** * @author threee * @date 2020/2/12 - 12:35 * 排序算法 (冒泡排序、选择排序、插入排序) * 冒泡与选择的区别: * 1、冒泡排序是比较相邻两位 ary[j] 和 ary[j+1] * 2、选择排序是每一轮 其他的数和每轮的第一个数比 ary[i] 和 ary[j] */ public class Arry2Demo { public static void main(String[] args) { int[] ary = new int[]{11,2,6,3,9,1,323,124,45,24,67,32 }; //bull(ary); //select(ary); insert(ary); System.out.println(Arrays.toString(ary)); } //冒泡排序 public static void bull(int[] ary){ for (int i=0; i<ary.length-1; i++){ //i控制轮数 for (int j=0; j<ary.length-1-i ; j++){//j控制元素下标 if (ary[j]>ary[j+1]){ //相邻两个元素比 int t = ary[j+1]; ary[j+1] = ary[j]; ary[j] = t; } } } } //选择排序 每一轮 其他的数和每轮第一个数比 public static void select(int[] ary){ for (int i=0; i<ary.length-1; i++){ //i控制轮数 for (int j=i+1; j<ary.length; j++){//j控制元素 if (ary[i]>ary[j]){ //i和j比 int t = ary[j]; ary[j] = ary[i]; ary[i] = t; } } } } //插入排序 /* 把数组分两半,从第二个元素起为右半部分(取数快,比较数慢,所以左边只留一个,提高效率) * 拿右半部分的每个元素取出来 * 和左半部分进行比较 * 再插入到左半部分相应的位置 **/ public static void insert(int[] ary){ //首先从第二个元素开始拆俩半 //左半部分一开始只有一个数 int j = 0; //右半部分循环 for (int i=1; i<ary.length; i++){ //把右半的元素取出来,t要放在第二层for循环外 //因为t要和每个左边的元素比 int t = ary[i]; //左边循环 for (j=i-1; j>=0; j--){ if (t<ary[j]){ //t和每个j比,如果比t大,j向右移动一位 ary[j+1] = ary[j]; ary[j] = t; } } } } }
|