選擇排序與插入排序--java

//選擇排序與插入排序(選擇排序是固定位置,找元素。插入排序固定元素找位置)
//選擇排序:從數組中找到最小的放到第一個位置,然後再在剩餘元素中找最小的放第二個位置,依次類推
//關鍵:兩層循環,在第一層循環中保存最小元素,在第二層循環中找到最小元素(位置)
//雙重循環,事件複雜度平均O(N*N),空間複雜度1

import java.util.*;
import java.io.*;


class SelectSort{
void sort(int[] arr){

for (int i=0;i<arr.length;i++){
int index=i;//注意在此處將i賦值給index,i爲當前剩餘元素的首位
for(int j=i+1;j<arr.length;j++){

if(arr[j]<arr[index]){//關鍵是記錄位置
index=j;//index指向當前最小數位置,這裏必須記錄位置,因爲下次if要用index
}
}
//關鍵,在此處保存
int tem=arr[i];//保存當前首位元素
    arr[i]=arr[index];//將當前最小數放到當前首位
    arr[index]=tem;//將原來首位的元素放到別處
}

} 
public static void main(String[] args){
int[] arr={4,3,12,5,2,7};
SelectSort A=new SelectSort();
A.sort(arr);
for(int i=0;i<arr.length;i++)
System.out.println(arr[i]);
}
}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


//插入排序:構建有序序列,對於未排序數據,在已排序序列中從後向前掃描,找到相應的位置並插入。
//插入排序效率的最好情況運行時間爲O(n);插入排序最壞情況運行時間和平均情況運行時間都爲O(n2)。空間複雜度O(1) 

import java.util.*;
import java.io.*;


class InsertSort{
void sort(int arr[]){//---------核心代碼,位置的查找與移位
for(int i=0;i<arr.length-1;i++){
int j=i+1;
int temp=arr[j];//第j個待排元素
while(j>0 && temp<arr[j-1]){
arr[j]=arr[j-1];//沒找到位置,第j-1個元素後移到第j位
j--;//繼續向前查找
}
arr[j]=temp;//找到位置,把待排元素放在此處
}
}

public static void main(String[] args){
int[] arr={4,3,12,5,2,7};//測試數據
InsertSort A=new InsertSort();
A.sort(arr);
for(int i=0;i<arr.length;i++)
System.out.println(arr[i]);
}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章