排序算法

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 @ 2015-12-02 22:35  chenyizh  阅读(107)  评论(0)    收藏  举报