楼主你好,根据你代码的情况,你选择的快速排序算法大概是这个思路吧:
给出一个列数字,以第一个数为基准,第二个数开始向右查找,与基准数对比;同时在末尾向左查找,与基准数对比;其中,左边查找的数值若比基准值小则与右边查找的位置交换数值,否则查找下一位,右边查找的数值若比基准值大则与左边查找的位置交换数值,否则查找下一位。直到两边查找碰头。然后把第一个数插入碰头出,那么此时左边的数不小于基准值,右边的数不大于基准值。递归操作,得到最后从大到小的排列了。
根据这个算法编写如下代码,楼主可以看看(勉强写完,还没优化):
//快速排序算法(一)由大到小排列
#include <stdio.h>
//快速排序算法(一)函数
void quicksort_01(int num[], int left, int right);
int main(void)
{
    int i = 0, a[11]={0,45,68,12,32,7,456,258,85,123,357};
    quicksort_01(a,1,10);
    printf("快速排序后大到小顺序为:\n");
    for(i=1;i<=10;i++)
        printf("%d\t", a[i]);
    return 0;
}
//快速排序算法(一)函数
void quicksort_01(int num[], int left, int right)
{
    int i = left + 1, j = right;
    int tmp = 0;
    int s = num[left];
    if(i < j)
    {
        while(i < j)
        {
            //若左边找到比s小或者右边找到比s大的数值,就i,j数值交换
            if(num[i] < s || num[j] > s)
            {
                tmp = num[i];
                num[i] = num[j];
                num[j] = tmp;
            }
            while(num[i] >= s)//从左边找,不小于s的不变
            {
                i++;
                break;
            }
            while(num[j] <= s)//左边找一次,再从右边找,不大于s的不变
            {
                j--;
                break;
            }
        }
        //根据i和j查找,最后i和j碰头的情况确定递归
        if(i == j)//i x j查找,然后i和j重合
        {
            if(s <= num[j])//i和j重合时,刚好代表数值不小于s时
            {
                num[left] = num[j];
                num[j] = s;
                quicksort_01(num, left, j-1);
                quicksort_01(num, j+1, right);
            }
            else//i和j重合是,刚好代表数值小于s时
            {
                num[left] = num[j-1];
                num[j-1] = s;
                quicksort_01(num, left, j-2);
                quicksort_01(num, j, right);
            }
        }
        else//i j查找,然后变为j i的情况
        {
            num[left] = num[j];
            num[j] = s;
            quicksort_01(num, left, j-1);
            quicksort_01(num, j+1, right);
        }
                
        
    }
}