选择排序与插入排序--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]);
}
}


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