快速排序

2021-03-09  本文已影响0人  eversay

一、记录一种快速排序算法的思路

  1. 找参考点,给定一个范围为 i 到 j 的数组,在数组数据中找出参考点。将数据的左边第一个数(参考
    点在左)i 位置作为参考点数据赋值给单独的变量 key,然后从右边 j 开始,比较j位置的元素val[j]是否大于参考点数据key,若是,则将 j 减一左移,直到 i <= j 条件不满足退出,若不是,则交换 i 和 j 位置的数据。(从右边开始,将右边数据赋值给 i ,i 的第一个变量赋值到key正好又空缺一个位置可以填充数组,而不至于数组丢 失)
  2. 接下来判断左边 i 位置的数据是否小于参考点数据 key,若不是则赋值给 j 位置的数据,若是,则继续左移数据,直到 i <= j 条件不满足退出。
  3. i 等于 j 的时候,返回 j 位置的数据即是参考点的数据
  4. 循环重复以上1,2,3步骤,将每次得到的参考点数据带入基准点左边数组进行排列,然后再排列右边的数组。
    ……

算法示例:

int qartion(int arr[],int len,int lo,int hi)
{
    int res = 0;
    int key = arr[lo];
    int i = lo,j = hi;
    while(i < j)
    {
            while(arr[j] >= key && j > i)j--;
            if(j > i)
                arr[i] = arr[j];
            while(arr[i] <= key && i < j)i++;
            if(i < j) 
                arr[j] = arr[i];
    }
    arr[i] = key;
    res = i;
    return res;
}

void quick_sort(int arr[],int len,int lo,int hi)
{
    if(lo >= hi)return;
    int m = qartion(arr,len,lo,hi);
    quick_sort(arr,len,lo,m-1);
    quick_sort(arr,len,m+1,hi);
}

学习之余记录总结的笔记
个人理解,若有不对欢迎请指出

上一篇 下一篇

猜你喜欢

热点阅读