Javaのバブルソートと最適化
3246 ワード
せっけい構想
字義によって彼が隣接する2つの数であることが理解され、比較の結果は次と比較される.2回forサイクル、外サイクル制御ホイール数、内サイクルは各ホイールのバブル処理を表し、まず元素比較を行い、元素交換を行う.
JAvaコード:
バブルソート最適化
マークにより次の数が秩序正しくループから直接飛び出し,ループの回数を減らすことができると判断した.
コードは次のとおりです.
上は単純な最適化をしただけで、深さで最適化することもできます.最適化は、秩序化された境界、および無秩序な境界によって行うことができる.
コードは次のとおりです.
字義によって彼が隣接する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));
}
}