排序算法-選擇排序-插入排序

一、選擇排序java

  1) 循環全部元素,找到最小元素的下標數組

  2) 最小元素下標和當前元素互換位置  數據結構

public Integer[] selectionSort(Integer[] arr,Integer n){
//循環數組全部元素
for(int i =0; i<n;i++){
//標記當前元素最小
Integer temp = arr[i];
int minIndex =i;
//循環獲取最小元素下標
for(int j = i+1;j<n;j++){
if(arr[j].compareTo(arr[i])<0) {minIndex = j;temp=arr[j];}
}
//交換元素
arr[minIndex] = arr[i];
     arr[i]=temp;
}
return arr;
}
java語言,若是是自定義的數據結構,須要重寫類中的compareTo方法自定義比較數據

二、插入排序
 
  1)依次循環全部元素,判斷每一個元素和以前的元素大小,進行交換    
//插入排序
public Integer[] insertSort(Integer[] arr,Integer n){
//循環全部元素
for(int i = 0; i < n; i++){
//判斷前一個元素是否大於當前元素,若是大於,進行交換
for(int j = i; j>0; j--){
Integer temp = arr[j];
if(arr[j].compareTo(arr[j-1])<0){
arr[j] = arr[j-1];
arr[j-1]=temp;
}
else break;
}
}
return arr;
}

  2)優化插入排序,複製代替交換
 
//插入排序優化public Integer[] insetSortCopy(Integer[] arr, Integer n){    //遍歷全部元素    for(int i = 0;i<n;i++){        //記錄終止的位置,要插入的位置        int j;        //變量當前的元素        Integer t = arr[i];        //依次向前覆蓋        for(j = i;j>0 && arr[j-1]>t;j--){            if(arr[j]<arr[j-1]) arr[j] = arr[j-1];        }        arr[j] = t;    }    return arr;}插入排序的速度,對於有序的數據,排序速度很是快。
相關文章
相關標籤/搜索