以前学习数据结构时没有仔细快速排序,所有又看了一下,写代码实现了一下
以下是一些理解,希望对初学的理解有所帮助
比如以下列数组为例
快速排序:
简单来说就是找个轴点,然后把数据分成两部分,比轴点小的都移到轴点的左边,比轴点数大的数移到右边。这样一来一轮下来的结果就是轴点的左都是小于等于轴点的,右边的就是大于等于轴点的数据,这样之后再对轴点分为两部分,再对两部分分别进行如上的操作,依次类推,分成的模块只有一个元素
1.首先确定一个轴点,声明变量名为pivot
2.然后,将小于轴点的都移到左边,将大于轴点的都移到右边
3.对左右两边分别进行递归,如是操作即可
选择轴点也是一个需要考量的过程,这里只是简单的选取第一个数为pivot
- void quickSort(int arr[],int low,int high){
- int pivot=arr[low];//以low元素为轴点
- //快速排序的核心代码
- if(low<high){//递归的条件,
- while(low<high){
- while(low<high&&pivot<=arr[high]){
- high--;
- }
- swap(arr,low,high);//进行替换,此时pivot的下标为high
- while(high>low&&pivot>=arr[low]){
- low++;//
- }
- swap(arr,low,high);//进行替换,此时pivot的下标又为low
- }
- //进行递归,递归的结束时条件是low<high不存在
- quickSort(arr,low+1,pHigh);
- quickSort(arr,pLow,low-1);
- }
- }