题目描述
请补充右边的代码,模拟“分割数组”的过程。
输入描述
无。
输出描述
两行。
第一行输出pivot的位置。
第二行输出分割后的数组。
输入样例
输出样例
4
6 10 8 12 15 13 17 18
#include <iostream>
using namespace std;
int n = 8;
int a[] = {0, 13, 6, 17, 18, 15, 10, 8, 12};
int partion(int a[],int left,int right){
int pivot = a[right];// 最右边的数为枢纽pivot,也就是上面情景描述中裁判的位置
int k = left - 1; //用来记录数字已经被用来交换的位置
for (int i = left; i < right; i++)
if (a[i] < pivot) // 枚举所有的数字,找出小于pivot的数
swap(a[i], a[++k]); // 将其与最前面的座位依次交换位置
swap(a[right], a[++k]); //最后裁判自己与中间的同学换位置
return k;
}
int main() {
cout << partion(a, 1, n) << endl;//打印出最后裁判的位置
// 输出数组
for (int i = 1; i <= n; ++i)
printf("%d ", a[i]);
return 0;
}