快排是一个重要的算法,思想是冒泡排序的改进,我理解的是不停的找到一个数的准确位置,找到所有比他大数和比他小的数。然后嵌套进行这个操作,直到排序完成。
void Quick_sort(int left,int right,int arr[]){
//left代表左指针位置,right代表右指针位置
if(left>=right)return;//当左右指针移到同一位置时停止移动,为嵌套结束准备
int i,j,base,temp;//base储存最开始的基点,temp用于交换元素
i=left,j=right;
base=arr[left];
while(i<j){//不断进行左移和右移操作直到重合
while(arr[j]>=base && i<j)j--;//以左值为基点,则先从右边往左找比基点小的值
while(arr[i]<=base && i<j)i++;//再从左往右找比基点大的值
if(i<j){//交换找到的两个值的位置
temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
arr[left]=arr[i];//最后把基点移到重合位置
arr[i]=base;//更新基点
Quick_sort(left,i-1,arr);//嵌套操作
Quick_sort(i+1,right,arr);
}