排序算法

1、冒泡排序:每次比较相邻元素,若顺序错误将交换位置,本质也为消除序列中的逆序对;从小到大排序,则越大越靠后,一趟比较,将有一个元素归位

2、快速排序:每次排序设置一个基准点,小于等于基准点全部放在左边,大于等于基准点全部放在右边,每一轮处理,就是将该轮基准点归位(实现中为左右哨兵相遇时);

                  注意:左起第一位作为基准点,则右哨兵需要先开始扫描; 时间复杂度 O(NlogN)

复制代码
void quicksort(int begin,int end){
    
    if(begin>end) return;
    
    int val=seq[begin]; //val存的就是基准数 
    int left=beign,right=end;
    
    while(left!=right){
        
        //顺序很重要,左起第一为基准数,要先从右往左扫描 
        while(seq[right]>=val && left<right){
            right--;
        }
        
        while(seq[left]<=val && left<right){
            left++;
        }
        
        if(left<right){ //哨兵没有相遇 
            swap(seq,left,right);
        }    
    }
    
    swap(seq,begin,left); //基准数归位 
            
    quicksort(begin,left-1);
    quicksort(right+1,end);    
}
复制代码

 

posted @   chenyizh  阅读(104)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示