赞
踩
快速排序虽然看着不难、理解起来也很简单,但是值得注意的点还是有很多,一不小心就踩坑!首先:快排的思想是:选定一个基准为,采用双指针的方法,左指针找比基准位小的数,右指针找比基准位大的数,进行交换,最后的结果就是,基准位左边的都是比它小的数,基准位右边都是比它大的数,再分别对这两个区间进行递归排序!
#include<iostream> using namespace std; void QuickSort(int arr[], int left, int right) { if (left >= right) return;//这是退出递归的条件,一定要写 int i = left; int j = right; int base = arr[left];//选取第一个元素做基准 while (i < j) { while (j > i && arr[j] >= base)//右指针一定要先写 j--; while (i < j && arr[i] <= base)//左指针后写 i++; if (i < j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } arr[left] = arr[i]; arr[i] = base;//基准位更换 QuickSort(arr, left, i - 1);//比基准位小的都排在左边,在左区间进行递归 QuickSort(arr, i + 1, right);//比基准位大的都排在右边,在右区间进行递归 } int main() { int arr[] = { 1,9,8,7,2,4,5,6,3,10 }; int len = sizeof(arr) / sizeof(arr[0]); QuickSort(arr, 0, len - 1); for (int i = 0; i < len; i++)//遍历输出 { cout << arr[i] << " "; } cout << endl; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。