|  | 
 
| 
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  复制代码#include <stdio.h>
void swap(int array[], int left, int right)
{
        int temp;
        temp = array[left];
        array[left] = array[right];
        array[right] = temp;
}
int partition(int array[], int left, int right)
{
        int pivot = array[left];
        while(left <= right)
        {
                while(left < right && pivot <= array[right])
                {
                        right--;
                }
                swap(array, left, right);
                while(left < right && array[left] <= pivot)
                {
                        left++;
                }
                swap(array, left, right);
        }
        return left;
}
void quick_show(int array[], int left, int right)
{
        int pivot;
        while(left < right)
        {
                pivot = partition(array, left, right);
                quick_show(array, left , pivot -1);
                quick_show(array, pivot +1, right);
        }
}
void quick_sort(int array[], int length)
{
        int left = 0, right = length -1;
        quick_show(array, left, right);
}
int main()
{
        int array[] = {1, 4, 7, 2, 5, 8, 3, 6, 9};
        int length = sizeof(array) / sizeof(array[0]);
        quick_sort(array, length);
        
        printf("排序后的结果是:");
        int i;
        for(i = 0; i < length; i++)
        {
                printf("%d ", array[i]);
        }
        putchar('\n');
        return 0;
}
 @FishC,帮我看下代码哪里有问题?
 
 本帖最后由 jackz007 于 2024-4-6 23:37 编辑 
复制代码#include <stdio.h>
void swap(int array[] , int left , int right)
{
        int temp                                       ;
        temp = array[left]                             ;
        array[left] = array[right]                     ;
        array[right] = temp                            ;
}
int partition(int array[] , int left , int right)
{
        int pivot = left                               ;
        while(left < right)
        {
                while(left < right && array[pivot] <= array[right])  // 【修改】
                {
                        right --                       ;
                }
// 【删除】     swap(array , left , right)             ; 
                while(left < right && array[left] <= array[pivot])   // 【修改】
                {
                        left ++                        ;
                }
                swap(array , left , right)             ;
        }
        swap(array ,  pivot , left)                    ;             // 【添加】            
        return left                                    ;
}
void quick_show(int array[], int left, int right)
{
        int pivot                                      ;
        while(left < right)
        {
                pivot = partition(array , left, right) ;
                quick_show(array , left , pivot - 1)   ;
                quick_show(array , pivot + 1 , right)  ;
                left ++                                ;            // 【添加】
                right --                               ;            // 【添加】
        }
}
void quick_sort(int array[], int length)
{
        int left = 0 , right = length - 1              ;
        quick_show(array , left , right)               ;
}
int main()
{
        int array[] = {1, 4, 7, 2, 5, 8, 3, 6, 9}      ;
        int length = sizeof(array) / sizeof(array[0])  ;
        quick_sort(array , length)                     ;
        printf("排序后的结果是:")                      ;
        for(int i = 0 ; i < length ; i ++)                          //【修改】:略有修改,循环内增加 int i 定义 
        {
                printf("%d ", array[i])                ;
        }
        putchar('\n')                                  ;
        return 0                                       ;
}
 | 
 |