思路分享:
1、我将我的标志位指针 pivot 指向数组的最后一个元素 pivot=arr[gight]
2、我在定义 i , j 2个变量,让他们都指向 arr[low]
3、然后我就开始遍历,只要我的 arr[j]<pivot 小,我就让我就交换arr[i] 和 arr[j] 的值,然后让我的 i+1 最后就会让我的左边全部是小于 pivot ,右边 是大于pivot
#include <iostream>
int partition(int arr[], int low, int hight) {
int pivot = arr[hight];
int i = low;
int temp = 0;
for (int j = low; j < hight; j++) {
//比pivot小的全部放在左边
if (arr[j] < pivot) {
arr[i] = arr[j];
arr[j] = arr[i];
temp = arr[i];
i++;
}
}
//注意最后要单独将pivot的值交换一下
temp = arr[i];
arr[i] = arr[hight];
arr[hight] = temp;
return i;
}
void qsort(int arr[], int low, int hight) {
if (low < hight) {
int mid = partition(arr, low, hight);//将数组进行分割,
qsort(arr, low, mid - 1);
qsort(arr, mid + 1, hight);
}
}
int main()
{
int arr[6] = { 2,1,8,4,6,3 };
qsort(arr, 0, 5);
for (int i = 0; i < 6; i++) {
printf("%d", arr[i]);
}
}