当前位置: 代码迷 >> 综合 >> 十大简单排序:快速排序
  详细解决方案

十大简单排序:快速排序

热度:2   发布时间:2024-01-20 03:07:43.0

快速排序(分治思想)

思想:选定一个元素做中轴,一般是数组最后一个元素,从两头遍历数组,左边比中轴大的元素和右边小于等于中轴的元素对换,当左游标大于等于右游标的时候,左游标处的值一定是大于中轴值的,将左游标处的值与末尾的中轴值交换,就完成了第一次的分割,接下来,对中轴两边的数组段再次进行上述相同的处理。最终就得到了排序好的数组。

快速排序用了分而治之的思想,把大问题分割为小问题,小问题的求解方式与大问题是一样的,只是规模小,最终小问题的解集合起来就是大问题的解。

int partition(int arr[],int leftBound,int rightBound)
{int left = leftBound;int right = rightBound-1;int tmp = arr[rightBound];while(left <= right){while(left<=right && arr[left] <= tmp)    left++;//arr[right]与tmp的比较不加等于的原因是,如果加了等于,那么在中轴的右边会出现和中轴值一样的值.while(left<=right && arr[right] > tmp)    right++;if(left < right)    swap(arr,left,right);}//left处的值一定是大于中轴值,也就是rightBound处的值swap(arr,left,rightBound);return left;
}void sort(int arr[],int leftBound,int rightBound)
{if(leftBound >= rightBound)    return;int mid = partition(arr,leftBound,rightBound);sort(arr,leftBound,mid-1);sort(arr,mid+1,rightBound);
}void quickSort(int arr[],int len)
{sort(arr,0,len-1);
}

 

  相关解决方案