快速排序算法

来源:互联网 发布:钢结构公司起名 知乎 编辑:程序博客网 时间:2024/06/05 13:30

1. 首先设置两个变量i,j。分别指向序列的首尾元素。

    该例子是以第一个元素为基准,从小到大进行排列。

2. 让j从后向前进行查询,直到找到第一个小于66的元素。则将最后一个j指向的数23,和i指向的66交换位置。
    然后将i从前向后查询,直到找到第一个大于66的元素76.将76和66位置互换。
 
3. 让j从后向前进行查询,直到找到第一个小于66的元素57,将57和66交换位置。

    然后将i从前向后查询,直到找到第一个大于66的元素81,将81和66交换位置。

4. 让j从后向前进行查询,直到找到第一个小于66的元素26


int AdjustArray(int s[], int l, int r) //返回调整后基准数的位置{    int i = l, j = r;    int x = s[l]; //s[l]s[i]就是第一个坑    while (i < j)    {        // 从右向左找小于x的数来填s[i]        while(i < j && s[j] >= x)            j--;        if(i < j)        {            s[i] = s[j]; //s[j]填到s[i]中,s[j]就形成了一个新的坑            i++;        }        // 从左向右找大于或等于x的数来填s[j]        while(i < j && s[i] < x)            i++;        if(i < j)        {            s[j] = s[i]; //s[i]填到s[j]中,s[i]就形成了一个新的坑            j--;        }    }    //退出时,i等于j。将x填到这个坑中。    s[i] = x;    return i;}void quick_sort1(int s[], int l, int r){    if (l < r)    {        int i = AdjustArray(s, l, r);//先成挖坑填数法调整s[]        quick_sort1(s, l, i - 1); // 递归调用        quick_sort1(s, i + 1, r);    }}

1 0