C 实现快速排序
一、快速排序
快速排序可以理解为是对冒泡排序的一种改进,把一组数,按照初始选定的标杆(参照数),分别从两端开始排序,左端'i'只要小于标杆(参照数)的数,右端'j'只要大于标杆(参照数)的数,
i----->middle<-----j每一次排序循环条件为 i != j 左端I不等于j,每次排序,j先排,从右往左找,知道找到第一个比标杆(参照数)小的数就停下来,而i从左往右,除了找到比自己大的数停下来之外,还要满足i<j的条件。当i和j都停下来时,我们就交换索引i处的值和索引j处的值,如果 i != j 就继续从当前j往左边排序找到比标杆(参照值)小的数,i继续从当前位置向右找比自己大的数,这样循环直到 i == j 意味着,当前i、j索引的值,除了参照值左边都比标杆(参照数)小,右边都比参照数大,然后第一次排序把标杆和i处的值交换,就算完成了,然后把该数组分成了两段,分别再递归调用自身继续排序,直到每轮剩下两个数或者j先找,走到了i的位置,所以递归调用停止的条件就应该是 i>j-1。
二、C语言实现
void quickSort(int * nums, int s, int e)
{
if(s >= e)
return;
int mark, k, j, t;
mark = s;
k = s,
j = e;
for(; s < e;)
{
for(;s < e && nums[e] > nums[mark];)
e--;
for(;s < e && nums[s] <= nums[mark];)
s++;
t = nums[e];
nums[e] = nums[s];
nums[s] = t;
}
t = nums[mark];
nums[mark] = nums[s];
nums[s] = t;
quickSort(nums, k, s-1);
quickSort(nums, s+1, j);
}
人生还有意义。那一定是还在找存在的理由