```
????hello
```
int div_sub_arr(int arr[], int left, int right)
{
????// 將arr[left]作為基準(zhǔn)
????int i = left + 1;
????int j = right;
????int temp = arr[left];
????while (i <= j)
????{
????????// 從左邊部分找到大于基準(zhǔn)的元素
????????while (arr[i] < temp)
????????{
????????????i++;
????????}
????????// 從右邊部分找到小于基準(zhǔn)的元素
????????while (arr[j] > temp)
????????{
????????????j--;
????????}
????????// 兩個(gè)元素交換位置穆律,同時(shí)分別向左向右移動(dòng)i和j
????????if (i < j)
????????????std::swap(arr[i++], arr[j--]);
????????else i++;
}
// 移動(dòng)基準(zhǔn)到正確位置
std::swap(arr[j], arr[left]);
// 返回基準(zhǔn)的index玄糟,這個(gè)index將原本的arr[]分割成兩個(gè)部分
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為分隔線遞歸分割后的兩個(gè)子數(shù)組
????quick_sort(arr, left, j - 1);
????quick_sort(arr, j + 1, right);
}
```
測(cè)試:
```
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;
}
```