黑马程序员技术交流社区

标题: c语言-如何更容易的理解快速排序法的赋值细节和递归调用 [打印本页]

作者: 三月小雨    时间: 2015-7-24 05:17
标题: c语言-如何更容易的理解快速排序法的赋值细节和递归调用
问题如标题,快速排序法,下面的代码是我看完别人的教程后自己写的,但就是想不太明白,代码中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 ;
    }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2