Javaのバブルソートと最適化

3246 ワード

せっけい構想
字義によって彼が隣接する2つの数であることが理解され、比較の結果は次と比較される.2回forサイクル、外サイクル制御ホイール数、内サイクルは各ホイールのバブル処理を表し、まず元素比較を行い、元素交換を行う.
JAvaコード:
public class Test {
	//    
	public static void main(String[] args) {
		int[] arr = new int[]{1,2,7,4,8};
		for (int i = 1; i < arr.length; i++) {
			for (int j = 0; j < arr.length - i; j++) {
				if(arr[j] > arr[j + 1]) {
					int temp;
					temp = arr[j];
					arr[j] = arr[j + 1];
					arr[j + 1] = temp;
				}
			}
		}
		System.out.println(Arrays.toString(arr));
	}
}

バブルソート最適化
マークにより次の数が秩序正しくループから直接飛び出し,ループの回数を減らすことができると判断した.
コードは次のとおりです.
package com.company.arrays;

import java.util.Arrays;

/**
 * 
* * Guo.shiLin * 2018\7\26 0026 * * @version 1.0 */ public class Sort1 { public static void main(String[] args) { int[] arrays = {13, 34, 12, 45, 10, 11, 56, 342, 112, 22, 33, 142}; long startTime = System.currentTimeMillis(); for (int i = 1; i < arrays.length; i++) { // , true boolean flag = true; for (int j = 0; j < arrays.length - i; j++) { if (arrays[j] > arrays[j + 1]) { int temp; temp = arrays[j + 1]; arrays[j + 1] = arrays[j]; arrays[j] = temp; // false flag = false; } } if (flag) { break; } } long endTime = System.currentTimeMillis() - startTime; System.out.println(" :" + endTime + "ms"); System.out.println(Arrays.toString(arrays)); } }

上は単純な最適化をしただけで、深さで最適化することもできます.最適化は、秩序化された境界、および無秩序な境界によって行うことができる.
コードは次のとおりです.
package com.company.arrays;

import java.util.Arrays;

/**
 * 
* * Guo.shiLin * 2018\7\26 0026 * * @version 1.0 */ public class Sort2 { public static void main(String[] args) { int[] arrays = {13, 34, 12, 45, 10, 11, 56, 342, 112, 22, 33, 142}; // , int sortBorder = arrays.length - 1; // int lastExchangeIndex = 0; long startTime = System.currentTimeMillis(); for (int i = 0; i < arrays.length; i++) { // , true。 boolean flag = true; for (int j = 0; j < sortBorder; j++) { if (arrays[j] > arrays[j + 1]) { int temp; temp = arrays[j + 1]; arrays[j + 1] = arrays[j]; arrays[j] = temp; // false flag = false; lastExchangeIndex = j; } } // if (flag) { break; } sortBorder = lastExchangeIndex; } long endTime = System.currentTimeMillis() - startTime; System.out.println(" :" + endTime + "ms"); System.out.println(Arrays.toString(arrays)); } }