数据结构-Sort

Sort好好复习了一下,不容易啊...

#include 
#include 
#include 
#include 

#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 

/*
made by davidsu33 2017-6-14
*/
#define MAX_SHOW_COUNT 100
//#define USE_DEPNUMS
constexpr int sortCount{200000000};

using namespace std;
typedef int DataType;

typedef function SortFunc;

template
void dumpData(Iterator start, Iterator end)
{
    std::copy(start, end, ostream_iterator(cout, ","));
    cout< m_data;
    bool m_showData {true};
};

void SortModel::sort()
{
    if(!m_sortFunc){
        return;
    }

    shuffleData();
    cout<<"数据个数:"< m_data[i])
        {
            assert(false);
            cout<<"排序错误!!!"<(cout, ","));
    cout< arr[1])
            swap(arr[0], arr[1]);
    }
}

//插入排序
void insert_sort(DataType *arr, int length)
{
    if(length <= 2) {
        return common_sort(arr, length);
    }

    show_sort_name("插入排序");
    DataType tmp{0};
    int j{0};
    for(int i=1; i=0 && arr[j] > tmp; --j)
        {
            arr[j+1] = arr[j];
        }

        arr[j+1] = tmp;
    }
}

//Shell排序
void shell_sort(DataType *arr, int length)
{
    if(length <= 2)
        return common_sort(arr, length);

    show_sort_name("希尔排序");
    DataType tmp{0};
    int i{0},j{0}, span= length/2;
    while(span >= 1)
    {
        for(i=span; i=0 && tmp < arr[j]; j-=span)
            {
                arr[j+span] = arr[j];
            }

            arr[j+span] = tmp;
        }

        span /= 2;
    }
}

/*!冒泡排序的特点,起点相同,终点的和等于length-1*/
//冒泡排序,往左冒泡
void bubble_sort_left(DataType *arr, int length)
{
    if(length <= 2)
        return common_sort(arr, length);

    show_sort_name("冒泡排序");
    for(int i=length-1; i>0; --i)
    {
       for(int j=length-1; j>length-1-i; --j)
       {
           if(arr[j] < arr[j-1])
           {
               swap(arr[j], arr[j-1]);
           }
       }
    }
}

//冒泡排序,往右冒泡
void bubble_sort_right(DataType *arr, int length)
{
    if(length <= 2) return common_sort(arr, length);
    show_sort_name("冒泡排序");
    for(int i=0; i arr[j])
                ...
          }
          貌似第一眼很对,但是??,该数据达不到最后一个值,
          排序一定要考虑边界问题,上面的写法改成
          for(int j=1; j arr[j])
          同样是正确的
        */
        for(int j=0; j arr[j+1])
                swap(arr[j], arr[j+1]);
        }
    }
}

//冒泡排序
void bubble_sort(DataType *arr, int length)
{
    bubble_sort_right(arr, length);
}

/*ERROR It's not bubble sort
void bubble_sort_optimize(DataType *arr, int length)
{
    if(length <= 2) return common_sort(arr, length);
    show_sort_name("冒泡排序(标志位优化)");
    bool flag {false};
    for(int i=0; i arr[j])
            {
                swap(arr[i], arr[j]);
                flag = false;
            }
        }

        if(flag)
            break;
    }
}
*/

void bubble_sort_optimize(DataType *arr, int length)
{
    if(length <= 2) return common_sort(arr,length);
    show_sort_name("冒泡排序(标志位优化)");
    bool flag{false};
    for(int i=0; i arr[j+1])
            {
                swap(arr[j], arr[j+1]);
                flag = false;
            }
        }

        if(flag) break;
    }
}

//快速排序
void quick_sort_private(DataType *arr, int l, int r)
{
    if(l >= r) return;
    int index = (l+r)/2;
    const int tmp{arr[index]};

    /*!
      找到适合于tmp值自己的位置
    */
    int i{l}, j{r};
    while(i < j)
    {
        for(; i tmp)
            {
                arr[index] = arr[i];
                index = i;
                //cout<<"arr[i]>tmp"<<"("<"<index; --j)
        {
            if(arr[j] < tmp)
            {
                arr[index] = arr[j];
                index = j;
                //cout<<"arr[j]>tmp"<<"("<= high)
    {
        return;
    }
    int first = low;
    int last = high;
    int key = a[first];/*用字表的第一个记录作为枢轴*/

    cout<<"need to find key= "<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值