java簡單實現冒泡、快速、選擇、插入排序演算法
阿新 • • 發佈:2019-02-12
程式主要實現了氣泡排序、快速排序、選擇排序、插入排序演算法
資料類Data.java
排序演算法類SortMethods.java
主類Main.java
示例程式:
資料類Data.java
package callclasstestoop;
public class Data {
public int[] dataArray(){
int[] data = new int[]{2, 1, 6,88,43,21,90,31,5,18};
return data;
}
}
排序演算法類SortMethods.java
package callclasstestoop;
/**
* 排序tool類
* @author gt.liu
* time 2016年10月12日 上午10:17:48
* TestJava callclasstestoop SortMethods.java
*/
public class SortMethods {
public SortMethods() {
// TODO Auto-generated constructor stub
System.out.println("==呼叫SortMethods類,這是構造方法==");
System.out.println("=========呼叫排序演算法類後========");
}
// 排序演算法實現
// 氣泡排序演算法
public void maoPaoSort(int[] array) {
System.out.println("**********氣泡排序演算法*********" );
System.out.println("public void maoPaoSort(int[] array){...}");
int temp;
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] > array[j]) {
temp = array[i];
array [i] = array[j];
array[j] = temp;
}
}
}
}
//快速排序演算法***使用分治策略把一個序列分為兩個序列
public void kuaiSuSort(int[] array, int start, int end) {
//System.out.println("==========快速排序演算法=========");//由於遞迴呼叫注掉
if (start < end) {
int base = array[start];// 選定基準值(第一個值作為基準值)
//int temp;// 交換臨時值
int i = start;
int j = end;
while(i < j){
while(i<j && array[j] > base){
j--;
}
if(i<j){
array[i] = array[j];
i++;
}
while(i<j && array[i] < base){
i++;
}
if(i<j){
array[j]=array[i];
j--;
}
array[i] = base;
}
kuaiSuSort(array, start, i - 1);
kuaiSuSort(array, i + 1, end);
}
}//kuaiSuSort(){...} over
//選擇排序演算法***每次尋找最小(大)的值放在最末尾的位置
public void xuanZeSort(int[] array){
System.out.println("**********選擇排序演算法**********");
int temp;
for(int i = 0; i < array.length; i++){
int flag = i;
for(int j = i+1; j < array.length; j++){
if(array[flag] > array[j]){
flag = j;
}
}
temp = array[i];
array[i] = array[flag];
array[flag] = temp;
}
}//xuanZeSort(){...} over
//插入排序演算法
public void chaRuSort(int[] array){
System.out.println("**********插入排序演算法**********");
int temp;
int j;
for(int i = 1; i < array.length; i++){
temp = array[i];
for(j = i; j > 0 && temp < array[j-1]; j--){
array[j] = array[j-1];
}
array[j] = temp;
}
}
}
主類Main.java
package callclasstestoop;
/**
* 主類Main
* @author gt.liu
* time 2016年10月12日 上午10:17:26
* TestJava callclasstestoop Main.java
*/
public class Main {
public static void main(String[] args) {
//資料載入
Data array = new Data();//Data類
int[] arrayData = array.dataArray();
//資料輸出測試
System.out.println("陣列長度:" + arrayData.length);
System.out.println("==========原始陣列============");
for(int i = 0; i < arrayData.length; i++){
System.out.print(arrayData[i] + "\t");
}
System.out.println("\n===========================");
//排序演算法類載入
SortMethods sort = new SortMethods();//SortMethods類
//sort.maoPaoSort(arrayData);//呼叫sort中的氣泡排序演算法
//呼叫sort中的快速排序演算法
//System.out.println("**********快速排序演算法**********");
//sort.kuaiSuSort(arrayData, 0, arrayData.length-1);
//sort.xuanZeSort(arrayData);//呼叫sort中的選擇排序演算法
sort.chaRuSort(arrayData);//呼叫sort中的插入排序演算法
//輸出排序結果
System.out.println("==========排序後資料===========");
for(int i = 0; i < arrayData.length; i++){
System.out.print(arrayData[i] + "\t");
}
System.out.println("\n===========================");
}
}