简单排序(冒泡,选择,插入)

冒泡排序

算法思想

冒泡排序经常是我们所接触到的第一个排序算法,因此思想也相对比较简单,它的原理就是按照索引(数组,集合等)顺序从前往后依次与它后面的元素一个一个进行比较。

算法分析

代码实现

    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;	 
	 }
     }

  }

}
posted @ 2019-07-04 09:45  BingoJ  阅读(364)  评论(0编辑  收藏  举报