sunjunior 2020-06-07
int size = 30; int [] arr = new int arr[size]; int arr.length = a; int temp; boolen flag = false for(int i=0;i<a-1;i++){ for(int j=0;j<a-1-i;j++){ if(arr[j]<arr[j+1]); temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } if(!flag){ break; }else{ flag = false; }
public class BubbleSort { public static void main(String[] args) { // int[] arr = {3, 9, -1, 10, -2}; int size = 8; int[] arr = new int[size]; for (int i = 0; i < arr.length; i++) { arr[i] = (int) (Math.random()*size); } System.out.println(Arrays.toString(arr)); sort(arr); } //小到大排序 public static void sort(int[] arr) { int a = arr.length; int temp;//临时变量 boolean flag = false;//标记是否发生变化 for (int i = 0; i < a - 1; i++) { for (int j = 0; j < a - 1 - i; j++) { if (arr[j] > arr[j + 1]) {//比较大小,逆序交换 flag = true; temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } System.out.println("第" + (i + 1) + "次排序结果"); System.out.println(Arrays.toString(arr)); if (!flag) { break; } else { flag = false; } } } }
import java.util.Arrays; //选择排序,假定第一个数为最小数,一直往后比较直到找出最小数交换。 //时间复杂度O(n^2) public class SelectSort { public static void main(String[] args) { int size = 12; int[] arr = new int[size]; for (int i = 0; i < size; i++) { arr[i] = (int) (Math.random() * size); } // int [] arr = {20,-1,0,-9,7,6}; System.out.println("排序前"); System.out.println(Arrays.toString(arr)); selectsort(arr); } public static void selectsort(int[] arr) { for (int i = 0; i < arr.length - 1; i++) { int minindx = 0;//假定最小数下标为第一数 int min = arr[0];//假设最小数的值为第一个数 for (int j = i + 1; j < arr.length; j++) { //走第二遍从第二位数字开始 if (min > arr[j]) {//如果假定的最下值比后面的大,进行交换 min = arr[j]; minindx = j; } } if (minindx != i) { arr[minindx] = arr[i]; arr[i] = min; } System.out.println("第" + (i + 1) + "次排序"); System.out.println(Arrays.toString(arr)); } } }
······待更
要知道时间复杂度只是描述一个增长趋势,复杂度为O的排序算法执行时间不一定比复杂度为O长,因为在计算O时省略了系数、常数、低阶。实际上,在对小规模数据进行排序时,n2的值实际比 knlogn+c还要小。