冒泡、选择、插入排序的简单记录


  冒泡排序:
  动图展示
  

  /**
* 时间复杂度(n-1)(n-(i+1))=n^2-in+i+1 * 空间复杂度 O(1)原地排序 * @param nums * @return */ public static int[] bubbleSort(int[] nums){ int i = 0; int j; int tmp; for(;i < nums.length;i++){ boolean isSorted = true; j = 0; for(;j < nums.length-i-1;j++){ if(nums[j] > nums[j+1]){//稳定,原地排序 isSorted = false; tmp = nums[j]; nums[j] = nums[j+1]; nums[j+1] = tmp; } } if(j == nums.length-i-1 && isSorted){ break; } } return nums; }
  选择排序:
  动图展示
  

  /** * 时间复杂度(n-1)(n-2)=n^2-3n+2 * 空间复杂度 O(1)原地排序 * @param nums * @return */ public static int[] selectSort(int[] nums){
     int index = -1;
int i = 0; int j; int tmp; for(;i<nums.length;i++){
       index = i; j
= i+1; for(;j<nums.length;j++){ if(nums[index] > nums[j]){//不稳定,原地排序 index = j; } }
       if(index != i){
         tmp = nums[i]
         nums[i] = nums[index];
         nums[index] = tmp;

       } }
return nums; }    插入排序:
   动图展示
  
   /** 
   * 时间复杂度(n-1)(n-1)/2
    * 空间复杂度 O(1)原地排序
    *
@param nums
    *
@return
    */
   public static int[] insertSort(int[] nums){
    
int i = 1;
    
int j;
     int tmp = 0;
for(;i<nums.length;i++){
       tmp = nums[i];
for(j = i-1;j>=0;--j){   if(nums[j] > tmp){
            nums[j+1] = nums[j];
            if(j == 0){
              nums[j] = tmp;
              break;
            }
  }else{
            nums[j+1] = tmp;
            break;
         }
} } return nums; }
posted @ 2020-09-30 17:05  sean-chang  阅读(73)  评论(0)    收藏  举报