数据结构中排序

各种排序代码如下:

//子序列进行分割
int partition(vector<int>& vec, int low, int high)
{
    int pivot = vec[low];
    while (low < high)
    {
        while (vec[high] >= pivot&&high>low)
            --high;
        vec[low] = vec[high];
        while (vec[low] <= pivot&&high>low)
            ++low;
        vec[high] = vec[low];
    }
    vec[low] = pivot;
    return low;
}
//快速排序
void quickSort(vector<int>& vec,int i,int j)
{
    if (i == j)
        return;
    int mid = partition(vec, i, j);
    if (i < mid)
        quickSort(vec, i, mid - 1);
    if (mid < j)
        quickSort(vec, mid + 1, j);
}

//直接插入排序
void insertSort(vector<int>& vec)
{
    int i = 0;
    int j = vec.size();
    cout << "原始序列:";
    copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
    cout << endl;
    while (i < j)
    {
        int k = i++;
        int temp = vec[k];
        while (k > 0 && temp < vec[k - 1])
        {
            vec[k] = vec[k-1];
            --k;
        }
        vec[k] = temp;
        cout << "本次排序结果:";
        copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
        cout << endl;
    }
}

//冒泡排序
void bubleSort(vector<int>& vec)
{
    int  j = vec.size() - 1;
    bool isExchange = true;
    while ( 0<j&&isExchange)
    {
        int k = 0;
        isExchange = false;
        while (k < j)
        {
            if (vec[k] > vec[k + 1])
            {
                swap(vec[k], vec[k + 1]);
                isExchange = true;
            }
            ++k;
        }
        --j;
        cout << "本次排序结果:";
        copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
        cout << endl;
    }
}

//选择排序
void selectSort(vector<int>& vec)
{
    int i = 0;
    while (i != vec.size())
    {
        int j = i;
        int min = vec[j];
        int minIndex = j;
        while (j != vec.size())
        {
            if (vec[j] < min)
            {
                min = vec[j];
                minIndex = j;
            }
            ++j;
        }
        vec[minIndex] = vec[i];
        vec[i++] = min;
        cout << "本次排序结果:";
        copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
        cout << endl;
    }
}

猜你喜欢

转载自blog.csdn.net/t46414704152abc/article/details/77802486