一直都不感写快速排序,发现没有那么难,还是要多想,多复习
是做的一道题,我觉得思想史快速排序。
在写的过程中,
1、引用传递:只需要在函数的参数加&,调用的时候不变
2、vector的初始化:
int ab[11]={3,2,7,5,4,13,9,6,0,10,1};
vector<int> a(ab,ab+11);
3、快速排序思想 :https://www.cnblogs.com/skywang12345/p/3596746.html
快速排序代码:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
void quickSort(vector<int> &a,int l,int r){
if(l<r){
int i,j,x;
i=l;
j=r;
x=a[i];
while(i<j){
while(i<j&&a[j]>x){
j--;
}
if(i<j)
a[i++]=a[j];
while(i<j&&a[i]<x)
i++;
if(i<j)
a[j--]=a[i];
}
a[i]=x;
quickSort(a,l,i-1);
quickSort(a,i+1,r);
}
}
int main(){
int ab[11]={3,2,7,5,4,13,9,6,0,10,1};
vector<int> a(ab,ab+11);
int len=a.size();
//
int left=0,right=len,now=len;
cout << "before sort:";
for (int i=0; i<len; i++)
cout << a[i] << " ";
cout << endl;
quickSort(a,0,len-1);
for (int i=0; i<len; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
最小K个数排序:
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <vector>
using namespace std;
void quickSort(vector<int> &a,int l,int r,int k){
if(l<r){
int i,j,x;
i=l;
j=r;
x=a[i];
while(i<j){
while(i<j&&a[j]>x){
j--;
}
if(i<j)
a[i++]=a[j];
while(i<j&&a[i]<x)
i++;
if(i<j)
a[j--]=a[i];
}
a[i]=x;
if(k==i){
}
else if(k<i){
quickSort(a,l,i-1,k);
}
else{
quickSort(a,i+1,r,k);
}
}
}
int main(){
int ab[11]={3,2,7,5,4,13,9,6,0,10,1};
vector<int> a(ab,ab+11);
int len=a.size();
//
int left=0,right=len,now=len;
cout << "before sort:";
for (int i=0; i<len; i++)
cout << a[i] << " ";
cout << endl;
int k=8;
quickSort(a,0,len-1,k);
cout<<"****"<<a[k]<<endl;
for (int i=0; i<len; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
前K个有序:
class Solution {
public:
vector<int> GetLeastNumbers_Solution(vector<int> input, int k) {
int len=input.size();
if(k>len){
vector<int> ac;
return ac;
}
quickSort(input,0,len-1,k-1);
vector<int> c(&input[0],&input[k]);
return c;
}
void quickSort(vector<int> &a,int l,int r,int k){
if(l<r){
int i,j,x;
i=l;
j=r;
x=a[i];
while(i<j){
while(i<j&&a[j]>x){
j--;
}
if(i<j)
a[i++]=a[j];
while(i<j&&a[i]<x)
i++;
if(i<j)
a[j--]=a[i];
}
a[i]=x;
if(k==i){
}
else if(k<i){
quickSort(a,l,i-1,k);
}
else{
quickSort(a,l,i-1,k);
quickSort(a,i+1,r,k);
}
}
}
};