面试手撕代码--快速排序
#include<iostream>
#include <vector>
using namespace std;
void quickSort(vector<int> &num, int l, int r);
int main()
{
int array[] = { 34,65,12,43,67,5,78,10,3,70 }, k;
int len = sizeof(array) / sizeof(int);
cout << "The orginal arrayare:" << endl;
vector<int> num(array, array + len);
for (k = 0; k<num.size(); k++)
cout << num[k] << ",";
cout << endl;
quickSort(num, 0, len - 1);
cout << "The sorted arrayare:" << endl;
for (k = 0; k<num.size(); k++)
cout << num[k] << ",";
cout << endl;
system("pause");
return 0;
}
void quickSort(vector<int> &num, int l, int r) {
if (l >= r) //先检查左右条件
return;
int i = l, j = r, x = num[l];
while (i < j) {
while (i < j && num[j] >= x)//从右向左找到第一个小于x的
j--;
if (i < j)
num[i++] = num[j];//填坑之后i++
while (i < j && num[i] <= x)//从左向右找第一个大于x的数
i++;
if (i < j)
num[j--] = num[i];
}
num[i] = x; //把最开始取出来的x放到i处
quickSort(num, l, i - 1);//以i为中间值,分左右两部分递归调用
quickSort(num, i + 1, r);
}
上一篇:
IDEA上Java项目控制台中文乱码
