A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

问题如标题,快速排序法,下面的代码是我看完别人的教程后自己写的,但就是想不太明白,代码中array[left]=array[right];array[right]=array[left];array[left]=temp;这3个赋值的流程,以及如何利用递归,将数组不断划分的,有没有掌握的好的同学或大神,给详细解说下

#include <stdio.h>

int main(int argc, const char * argv[]) {
int array[10]={12,18,5,44,21,36,8,17,92,53};
int len=10;
void QuickSort();
QuickSort(array,0,len-1);

for(int i=0;i<len;i++){
printf("%d\t",array[i]);
}
return 0;

}



void QuickSort(int array[],int low,int high){
    int left=low,right=high;
    if (left<right) {
        while (left<right) {
            int temp=array[left];
            while (left<right&&array[right]>=temp) {
                right--;
            }
            array[left]=array[right];
            while (left<right&&array[left]<=temp) {
                left++;
            }
            array[right]=array[left];
            
            array[left]=temp;
        }
        int mid=left;
      
        QuickSort(array,low,mid-1);
        QuickSort(array,mid+1,high);
        
    }else{
        return ;
    }
}

void QuickSort();
QuickSort(array,0,len-1);

for(int i=0;i<len;i++){
printf("%d\t",array[i]);
}
return 0;

}



void QuickSort(int array[],int low,int high){
    int left=low,right=high;
    if (left<right) {
        while (left<right) {
            int temp=array[left];
            while (left<right&&array[right]>=temp) {
                right--;
            }
            array[left]=array[right];
            while (left<right&&array[left]<=temp) {
                left++;
            }
            array[right]=array[left];
            
            array[left]=temp;
        }
        int mid=left;
      
        QuickSort(array,low,mid-1);
        QuickSort(array,mid+1,high);
        
    }else{
        return ;
    }
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马