简单排序(冒泡,选择,插入)
冒泡排序
算法思想
冒泡排序经常是我们所接触到的第一个排序算法,因此思想也相对比较简单,它的原理就是按照索引(数组,集合等)顺序从前往后依次与它后面的元素一个一个进行比较。
算法分析
代码实现
public static void bubleSort(Integer[] arr){
for(int i=0;i<arr.length-1;i++){
for(int j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
选择排序
算法思想
选择排序的核心思想就是从待排序的元素中找出最小的元素,我们可以把一组数据分为两部分,左边是排好的,右边是没有排好的。最初的时候,全是没有排序过的,我们此时假定arr[0]
,也就是minIndex=0
,这个位置的元素是最小的。然后我们依次把后面的元素与它进行比较,如果arr[j]比这个arr[minIndex]
还要小,那么我们就更新minIndex
->minIndex=j
的值,最后该轮循环结束后如果i
不等于minIndex
,我们就进行交换操作。接着i=1,minIndex=i,进行下一轮的操作。
算法分析
代码实现
public static void selectSort2(Integer[] arr){
for(int i=0;i<arr.length-1;i++){
int minIndex = i;
for(int j=i+1;j<arr.length;j++){
if(arr[minIndex]>arr[j]){
minIndex=j;
}
}
if(minIndex!=i) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
插入排序
算法思想
对于插入排序,我们可以将其与选择排序进行比,这两种排序我们都可以将其分为两部分,已经排好的(左边),没有排好的(右边)。选择排序是从从未排好的数组中选择最小的,而插入排序是按索引次序拿出元素,然后在已经排好序的数组中进行移动(一般从后向前移动)。
思路分析
插入排序常规代码实现:
public void sort(Comparable[] arr){
for(int i=1;i<arr.length;i++){ //外循环
for(int j=i;j>0;j--){ //内循环
if(arr[j].compareTo(arr[j-1])<0){
Comparable temp = arr[j-1];
arr[j-1]=arr[j];
arr[j]=temp;
}
else{
break; ,
}
}
}
}
插入排序优化后实现
public void sort2(Comparable[] arr){
for(int i=1;i<arr.length;i++){
Comparable e=arr[i];
int j;
for(j=i;j>0;j--) {
if(arr[j-1].compareTo(e)>0){
arr[j]=arr[j-1];
}else{
arr[j]=e;
break;
}
}
}
}