快速排序手撕模板(递归)

    技术2022-07-11  113

    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; }

     

    Processed: 0.010, SQL: 10