问题如标题,快速排序法,下面的代码是我看完别人的教程后自己写的,但就是想不太明白,代码中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 ;
}
} |
|