希尔排序自写版本

本来以为希尔排序是挺简单的,但是自己写数组试了试却发现总是排不好,在草稿纸上照着程序步骤演算过来,发现每次缩小一半的区间再排序一次的话,不一定能确保这个区间完全有序,需要设立一个标识=交换次数,在每次排序后,再走一次,如果标识为0,才可以进行下一次区间减半。
    void shellsort(vector<int> input) {
        int len=input.size();
        int ban=len/2;
        while(ban>0)
        {
            int x;
            do{
                x=0;
                for(int i=ban;i<len;++i)
                {
                    int j=i-ban;
                    if(input[j]>input[i])
                    {
                        swap(input[j],input[i]);
                        ++x;
                    }
                }}while(x>0);
            ban/=2;
        }

猜你喜欢

转载自blog.csdn.net/weixin_40736096/article/details/79806488