排序算法Day1

#include "mysort.h"
#include 
   
   
    
    
#include 
    
    
     
     
#include 
     
     
      
      
#include 
      
      
       
       
#include 
       
       
         #include 
        
          #include 
         
           using namespace std; //插入排序 时间复杂度 平均哦O(N^2) 完全有序时O(N) 空间复杂度O(1) 稳定 //思想:把待排序列分为有序序列和无序序列,然后将无序列的元素插入到有序序列,规则是从后往前找 //第一个比我小的,将比我大的往后移,找到后插入到第一个比我小的后面 void insertSort(int *arr,int len) { if(NULL == arr) return; for(int i=1;i 
          
            =0;j--) { if(arr[j]<=tmp) { break; } else { arr[j+1]=arr[j]; } } arr[j+1]=tmp; } } //希尔排序 时间复杂度 O(n^1.3 ~ n^1.5) 空间复杂度 O(1) 不稳定 //思想:对待排序列进行分组,利用插入排序越有序越快的特性,多次插入排序,最后必定只剩一个组(全部序列) void shell(int *arr,int len,int gap) { for(int i=gap;i 
           
             =0;j-=gap) { if(arr[j]<=tmp) { break; } else { arr[j+gap]=arr[j]; } } arr[j+gap]=tmp; } } void shellSort(int *arr,int len) { int brr[3]={5,3,1}; for(int i=0;i 
            
              arr[j+1]) { int tmp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=tmp; } } } } //快速排序 平均时间复杂度O(nlogn) 最坏的情况下 O(N^2) 空间复杂度(logn) 不稳定 //思想:选择基准,定义两个指针low,high,将比基准大的移到基准后面,比基准小的移到基准前面 int partition(int *arr,int start,int end) { int low=start; int hign=end; int tmp=arr[low]; while(low 
             
               =tmp) { hign--; } if(low == hign) { break; } else { arr[low]=arr[hign]; } while(low 
              
                start+1) { Quick(arr,start,index-1); } if(index 
               
                 =tmp) { hign--; } if(low == hign) { break; } else { arr[low]=arr[hign]; } while(low 
                
                  >1); if(low 
                 
                   arr[hign]) { swap(arr[mid],arr[hign]); } if(arr[low]>arr[hign]) { swap(arr[low],arr[hign]); } if(arr[mid]>arr[low]) { swap(arr[mid],arr[low]); } } return arr[low]; } int partition(int *arr,int start,int end) { int low=start; int hign=end; int tmp=midofvalue(arr,hign,low); while(low 
                  
                    =tmp) { hign--; } if(low == hign) { break; } else { arr[low]=arr[hign]; } while(low 
                   
                     =key) { if(arr[hign] == key) { swap(arr[right],arr[hign]); right--; rightlen++; } hign--; } arr[low]=arr[hign]; while(low 
                    
                      right && arr[i]!=key) { swap(arr[i],arr[j]); i++; j--; } QuickSort3(arr,first,low-leftlen-1); QuickSort3(arr,low+rightlen+1,last); } 
                     
                    
                   
                  
                 
                
               
              
             
            
           
          
         
       
      
      
     
     
    
    
   
   
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值