算法系列一:简单排序
一.三种简单易懂的排序算法
1.代码:
package com.inspire.jdk.caculate; /** * Created by yaming on 18-6-26. */ public class OrderTest { public static void main(String[] args) { /* 冒泡排序:相邻两个位置元素比较,如果前面一个元素比后面一个元素大,就交换位置 每一轮比较后,会确定一个最大值,最大值放在最后一位 总共需要比较 : data.length-1 次 下一轮比较的次数比上一轮比较的次数少一次 时间复杂度:O(n^2). 双重for循环 */ int[] arr = {2,4,5,3,9,1}; for (int i = 0; i < arr.length-1; i++) { for (int j = 0; j < arr.length-i-1; j++) { if(arr[j]>arr[j+1]){ int c = arr[j]; arr[j] = arr[j+1]; arr[j+1] = c; } } } /** * 选择排序:从数组中找到最小的元素,将它与数组第一个元素交换位置 * 没一次确定一个最小值,放在第一个位置 * 总共需要交换:data.length 次 * 下一次要比较的数组比上一次少一个元素 * 时间复杂度:O(n^2). 双重for循环 */ for (int i = 0; i < arr.length; i++) { int min =i; //找出比第一个位置上的元素还小的元素, for (int j = i+1; j < arr.length; j++) { if(arr[j]< arr[min]){ min = j; } } //交换两个变量: arr[temp] <--> arr[i] int temp = arr[min]; arr[min] = arr[i]; arr[i] = temp; } int[] data = {2,4,5,3,9,1}; /** * 插入排序 * 每一轮比较后的结果:该元素前面元素是有序的 * 比较次数: data.length-1 * */ for (int i = 1; i < data.length; i++) { //只和该元素前面的元素比较,比较的结果:该元素前面的元素是有序的 for (int j = i; j>0 ; j--) { //如果后面的大于前面的就交换 if(data[j]<data[j-1]){ int temp = data[j]; data[j] = data[j-1]; data[j-1] = temp; } } } for (int i = 0; i < data.length; i++) { System.out.print(data[i]); } } }