vector<int> quicksort(vector<int> arr,int left,int right)
{
if(right<left){
return arr;
}
int low=left;
int high=right;
int base=arr[low]; //以最左边的第一个为基准数
//采用双指针方法
while (low < high) {
// 当队尾的元素大于等于基准数据时,向前挪动high指针
while (low < high && arr[high] >=base) {
high--;
}
// 如果队尾元素小于base了,需要将其赋值给low
arr[low] = arr[high];
// 当队首元素小于等于tmp时,向前挪动low指针
while (low < high && arr[low] <= base) {
low++;
}
// 当队首元素大于tmp时,需要将其赋值给high
arr[high] = arr[low];
}
// 跳出循环时low和high相等,此时的low或high就是tmp的正确索引位置
// 由原理部分可以很清楚的知道low位置的值并不是tmp,所以需要将tmp赋值给arr[low]
arr[low] = base;
quicksort(arr,left,low-1);
quicksort(arr,low+1,right);
return arr;
}
冒泡排序
/**
* @brief Bubblesort
* 我们总结一下:如果有n个数进行排序,只需将n-1个数归位,也就是说要进行n-1趟操作。
* 而“每一趟”都需要从第1位开始进行相邻两个数的比较,将较小的一个数放在后面,
* 比较完毕后向后挪一位继续比较下面两个相邻数的大小,重复此步骤,直到最后一个尚未归位的数,
* 已经归位的数则无需再进行比较(已经归位的数你还比较个啥,浪费表情)
* @param arr
* @return
*/
vector<int> Bubblesort(vector<int> &arr)
{
//如果有n个数进行排序,只需将n-1个数归位,也就是说要进行n-1趟操作
for(int i=0;i<arr.size()-1;i++){
//已经归位的数则无需再进行比较
for(int j=0;j<arr.size()-i-1;j++)
{
if(arr[j]>arr[j+1])
swap(arr[j],arr[j+1]);
}
}
return arr;
}