快速排序算法的递归实现的个人理解

快速排序算法的递归实现的个人理解


    关于快速排序,该算法实现原理是将要排序的一组数据根据一个被选中的数据,以这个数据为中心将数据分成两侧,一侧大一侧小,使用递归,将分好的两组数据分别进行再次分组,直至不能再分,这时排序则排序完毕。
    因此快速排序算法的中心应该是如何根据选中的数据将数据分成两组,而这里这个选中的数据则直接默认为数据组的第一个数据,虽然在一些情况下可能很慢,但大多数情况是比一般排序算法快的。
    而快速排序的C++实现如下(这里是升序排法):

void quick_sort(array<int,19> arr,int start,int end){
    if(start<end){//递归结束条件
        int first = start;
        int last = end;
        int flag = arr[start];
        while(first<last){
//start和end为函数传进来的数组的头和尾,使用两个变量保存
        int first = start;
        int last = end;
//保存被选中的数,这里直接使用第一个元素,也可以通过计算出头,尾,中间三个值,取出中值与第一个元素交换位置,确保最坏情况不会发生
        int flag = arr[start];
        while(first<last){//使用循环,确保在头尾碰头之前遍历完所有数据
            while(first<last&&arr[last]>=flag){
                --last;
            }
            //从尾部开始遍历查找比被选中的数小的数,并将它放在头的位置
            arr[first]=arr[last];
            while(first<last&&arr[first]<=flag){
                ++first;
            }
            //接着从头部开始遍历查找比被选择的数大的数,并将它放在尾的位置
            arr[last]=arr[first];
        }//如果头尾没有碰头,则继续进行比较,确保以被选中的数为界的左右两侧数据组一大一小
        arr[first]=flag;//将被选中的数放在两组数据的中间
        //使用递归再次排序
        quick_sort(arr,start,first-1);
        quick_sort(arr,first+1,end); 
    }
}

猜你喜欢

转载自blog.csdn.net/madonghyu/article/details/79329971
今日推荐