目录
一、冒泡排序
比较相邻的元素。如果第一个比第二个大,就交换他们两个。
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
针对所有的元素重复以上的步骤,除了最后一个,即需要进行length-1次。
第一次是对n个数进行n-1次比较,进行到最后第n个的一个是最大的;
第二次是对n-1个数进行n-2次比较,进行到最后第n-1个的一个是最大的;
......
持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
代码案例:
package src.day808; import java.util.Arrays; import java.util.Random; public class Morning02 { public static void main(String[] args) { int[] array = new int[10]; Random number = new Random(); System.out.println("随机生成数组为:"); for (int i = 0; i < array.length; i++) { array[i] = number.nextInt(0,100); } for (int i = 0; i < array.length-1; i++) {//遍历次数 for (int j = 0; j < array.length-1-i; j++) {//下标, if (array[j] >array[j+1] ) { int temp = array[j]; array[j] = array[j + 1]; array[j+1] = temp; } } } System.out.println(Arrays.toString(array)); } }
二、选择排序
选择排序是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,继续放在起始位置知道未排序元素个数为0。
选择排序的步骤:
1>首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 2>再从剩余未排序元素中继续寻找最小(大)元素,然后放到未排序序列的起始位置。 3>重复第二步,直到所有元素均排序完毕。
package src.day808; import java.util.Arrays; //快速排序 public class Afternoon01 { public static void main(String[] args) { int[] arr = new int[]{51,63,28,77,15,46,73}; for (int i = 0; i < arr.length-1 ; i++) {//比较的次数 int min = i;//默认将a[0]当作是最小的值 for (int j = 1+i; j < arr.length; j++) {//是被比较的数的下标。所以是从j=1+i(第二个数开始) if(arr[min]>arr[j]){//若51>63,为false,继续j++。若51>28时 min = j;//将j = 2赋给min,a[0]就变成了a[2],28暂时成为最小值 } } int temp = arr[i];//一轮循环完后,将最小值与第一个元素进行交换,第一个最小值就判断出来了。继续循环下去。 arr[i] = arr[min]; arr[min] = temp; } System.out.println(Arrays.toString(arr)); } }
三、插入排序
插入排序也是一种常见的排序算法,插入排序的思想是:将初始数据分为有序部分和无序部分,每一步将一个无序部分的数据插入到前面已经排好序的有序部分中,直到插完所有元素为止。 插入排序的步骤如下:每次从无序部分中取出一个元素,与有序部分中的元素从后向前依次进行比较,并找到合适的位置,将该元素插到有序组当中。
案例:
package src.day808; import java.util.Arrays; //插入排序 public class Afternoon02 { public static void main(String[] args) { int[] arr = new int[]{53,51,28,77,15,46,73}; //相邻两个数字作比较 for (int i = 1; i <arr.length ; i++) { int ccurrent = arr[i];//定义被比较的第二个值 int preIndex = i-1;//定义第一个值的下标 //跟前一个数字作比较 while (preIndex >= 0 && arr[preIndex] > ccurrent){//当下标小于零时,程序不再执行,当第前面一个值比后面一个值大时 arr[preIndex+1] = arr[preIndex];//把大的数字往后赋值,相当于给a[0]最小值腾位置 preIndex--;//一直往前循环 } arr[preIndex+1]= ccurrent;//当while循环循环到最后时,preindex的值已经成为负一(a[-1]),所以要将下标加1,将最小值赋给a[0] } System.out.println(Arrays.toString(arr));//输出 } }