八大排序
1:冒泡排序
依次比较相邻的两个数,将小数放在前面,大数放在后面。
即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。
在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

public class BubbleSort { public static void BubbleSort(int[] arr) { int temp;//定义一个临时变量 for(int i=0;i<arr.length-1;i++){//冒泡趟数 for(int j=0;j<arr.length-i-1;j++){ if(arr[j+1]<arr[j]){ temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } public static void main(String[] args) { int arr[] = new int[]{1,6,2,2,5}; BubbleSort.BubbleSort(arr); System.out.println(Arrays.toString(arr)); } }
2:插入排序
基本思想:选择前面两个排序,构成一个有序序列。将一个数插入进去,构成一个有序序列,重复之前的步骤。
把n个待排序的元素看成一个有序表和无序表。一开始有序表只包含一个元素,无序表中包含n-1个元素。排序过程中每次从无序表中取出第一个元素,把它依次与有序表中的元素进行比较。然后把它插 入到有序表的适当位置,形成新的有序表。
package com.test_1; import java.util.Calendar; public class Demo5_3 { public static void main(String[] args) { //构建一个庞大的无序数组用于测试时间 int len=10; int arr1 [] = new int [len]; for(int i=0;i<len;i++){ //让程序随机产生一个1~10000的数 //Math.random()会产生一个0~1的数 int t = (int)(Math.random()*len); arr1[i] = t; } //插入排序法 InsertSort iSort = new InsertSort(); iSort.sort(arr1); } } class InsertSort { public void sort(int arr[]) { for(int i =1; i<arr.length;i++) { //插入的数 int insertVal = arr[i]; //被插入的位置(准备和前一个数比较) int index = i-1; //如果插入的数比被插入的数小 while(index>=0&&insertVal<arr[index]) { //将把arr[index] 向后移动 arr[index+1]=arr[index]; //让index向前移动 index--; } //把插入的数放入合适位置 arr[index+1]=insertVal; } for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } } }
3:选择排序
基本思想:遍历整个序列选择一个最小的放在最前面,遍历剩下的序列选择一个最小的放在最前面,重复前面的步骤

//选择排序 public class SelectionSort { public static void main(String[] args) { int[] arr={1,3,2,45,65,33,12}; System.out.println("交换之前:"); for(int num:arr){ System.out.print(num+" "); } //选择排序的优化 for(int i = 0; i < arr.length - 1; i++) {// 做第i趟排序 int k = i; for(int j = k + 1; j < arr.length; j++){// 选最小的记录 if(arr[j] < arr[k]){ k = j; //记下目前找到的最小值所在的位置 } } //在内层循环结束,也就是找到本轮循环的最小的数以后,再进行交换 if(i != k){ //交换a[i]和a[k] int temp = arr[i]; arr[i] = arr[k]; arr[k] = temp; } } System.out.println(); System.out.println("交换后:"); for(int num:arr){ System.out.print(num+" "); } } }

浙公网安备 33010602011771号