排序算法-选择排序-插入排序

1、选择排序

  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方法自定义比较数据

2、插入排序
 
  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;
}

插入排序的速度,对于有序的数据,排序速度非常快。




原文地址:https://www.cnblogs.com/wind-man/p/10810019.html