快排c++实现

```

    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;

}


```

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容