首页 > 代码库 > 快速排序实现
快速排序实现
// 此版本为调整优化好的快速排序算法实现。 # include <iostream> # include <vector> using namespace std; int Partition(vector<int> &arr, int low, int high) { int pivot; // 划分后基准记录的位置 int pivotkey = arr[low]; // 用区间的第一个值作为基准,也可以采用其他方式,比如三数取中 while (low < high) { while (low < high && arr[high] >= pivotkey) // 先从右向左扫描 high--; if (low < high) // 每次必须有判断,因为有可能在此时出现low>high的情况 arr[low++] = arr[high]; while (low < high && arr[low] <= pivotkey) // 再从左向右扫描 low++; if(low < high) arr[high--] = arr[low]; } pivot = low; // 找出基准位置 arr[pivot] = pivotkey; // 基准位置定位 return pivot; } // 典型的分治法的思想 void quicksort(vector<int> &arr, int low, int high) { if (low < high) // 仅当区间长度大于 1 时才排序 { int pivot = Partition(arr, low, high); // 分解,找出基准 quicksort(arr, low, pivot-1); // 递归求解左子区间 quicksort(arr, pivot + 1, high); // 递归求解右子区间 } } int main () { vector<int> arr; int temp; while (cin >> temp) { arr.push_back(temp); // 将数存入数组 } quicksort(arr, 0, arr.size() - 1); for(auto i : arr) cout << i << endl; return 0; }
// 优化的冒泡算法实现 # include <iostream> # include <vector> using namespace std; void BubbleSort(vector<int> &arr) { int i , j, temp,len; len = arr.size(); for (i = 0; i < len - 1; i++) // 外层循环控制无序区的终点位置 { bool flag = true; for (j = len - 1; j > i; j--) //内层控制每次比较的位置 { if (arr[j] < arr[j - 1]) { temp = arr[j]; arr[j] = arr[j -1]; arr[j - 1] = temp; flag = false; } } if (flag) break; } } int main() { vector<int> arr; int temp; while (cin >> temp) { arr.push_back(temp); // 将数存入数组 } BubbleSort(arr); cout <<"after sort: "<< endl; for(auto i : arr) cout << i << endl; return 0; }
快速排序实现
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。