排序演算法:選擇排序,直接插入排序,氣泡排序
阿新 • • 發佈:2018-11-14
package com.Algorithm.Search_Sort;
import java.util.Arrays;
public class Sort {
public int array[] = {99,34,76,92,34,17,77,41,40,36,6};
//氣泡排序法:比較條件為array[j]>array[j+1]為穩定排序,比較條件為array[j]>=array[j+1]為不穩定排序
public void BubbleSort(){
//進行N-1輪
for(int i=0;i<array.length-1;i++){
//每輪進行N-1-i次比較
for(int j=0;j<array.length-1-i;j++)
if(array[j]>array[j+1]){
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
System.out.println("氣泡排序法:"+Arrays.toString(array));
}
//選擇排序法:不穩定的排序方法
public void SelectSort(){
//
for(int i=0;i<array.length- 1;i++){
//假設每輪的第一個數是待排序列的最小值,記錄最小值的陣列下標
int minIndex=i;
//從待排陣列中找到最小值,記錄真正最小值下標
for(int j=i+1;j<array.length;j++){
if(array[j] < array[minIndex]){
minIndex=j;
}
}
//原第一個 與 最小值 交換位置
int temp=array[i];
array[i]=array[minIndex];
array[minIndex]=temp;
}
System. out.println("選擇排序法:"+Arrays.toString(array));
}
//插入排序法:穩定排序
public void InsertSort(){
//進行N-1輪
for(int i=1;i<array.length;i++){
//記錄下當前要插入的數及其下標
int temp=array[i];
int j=i;
//從最後一位開始,然後與其前面一位做比較,如果比其小,就覆蓋
while(j<0 && temp<array[j-1]){
array[j]=array[j-1];
j--;
}
}
System.out.println("插入排序法:"+Arrays.toString(array));
}
//三種列印int陣列的方法
public void print(){
//Arrays工具類中toString靜態方法遍歷
System.out.println(Arrays.toString(array));
//正常for迴圈遍歷
for(int i=0;i<array.length;i++){
System.out.print(array[i]+" ");
}
//foreach語句遍歷
for(int j:array){
//這裡的j不再是下標的意思,而是array中遍歷取出的每個數
//如果輸出array[j],大概率會出現陣列越界的錯誤
System.out.print(j+" ");
}
}
public static void main(String[] args) {
Sort sort=new Sort();
sort.BubbleSort();//氣泡排序法
sort.SelectSort();//選擇排序法
sort.InsertSort();//插入排序法
}
}
輸出結果