快排c++实现

2020-12-16  本文已影响0人  yshi2017

```

    hello

```

int div_sub_arr(int arr[], int left, int right)

{

    // 将arr[left]作为基准

    int i = left + 1;

    int j = right;

    int temp = arr[left];

    while (i <= j)

    {

        // 从左边部分找到大于基准的元素

        while (arr[i] < temp)

        {

            i++;

        }

        // 从右边部分找到小于基准的元素

        while (arr[j] > temp)

        {

            j--;

        }

        // 两个元素交换位置,同时分别向左向右移动i和j

        if (i < j)

            std::swap(arr[i++], arr[j--]);

        else i++;

}

// 移动基准到正确位置

std::swap(arr[j], arr[left]);

// 返回基准的index,这个index将原本的arr[]分割成两个部分

return j;

}

void quick_sort(int arr[], int left, int right)

{

    if (left > right)

        return;

    // 分割arr,分隔元素index为j

    int j = div_sub_arr(arr, left, right);

    // 以j为分隔线递归分割后的两个子数组

    quick_sort(arr, left, j - 1);

    quick_sort(arr, j + 1, right);

}

```

测试:

```

int main()

{

    int iCount = 6;

    int arr[] = {1, 3, 2, 6, 5, 4};

    for (int i = 0; i < iCount; ++i)

    {

    std::cout << arr[i] << "\t";

    }

    std::cout << std::endl;

    std::cout << "--------------------------------------------" << std::endl;

    quick_sort(arr, 0, iCount - 1);

    for (int i = 0; i < iCount; ++i)

    {

        std::cout << arr[i] << "\t";

    }

    std::cout << std::endl;

    return 0;

}

```

上一篇 下一篇

猜你喜欢

热点阅读