西安做网站哪家比较好,视频广告宣传片制作,主流跨境电商平台有哪些?,android手机app开发快排 QuickSort
两边向中间扫描法#xff1a;取一个基点值#xff0c;从左往右扫描#xff0c;基点值左边所有元素小于它#xff0c;遇到大于基点值的则停下#xff0c;开始从右往左扫描#xff0c;右边所有元素大于他#xff0c;遇到小于基点值则停下#xff0c;如果…快排 QuickSort
两边向中间扫描法取一个基点值从左往右扫描基点值左边所有元素小于它遇到大于基点值的则停下开始从右往左扫描右边所有元素大于他遇到小于基点值则停下如果这时左右指针不交叉左指针在基点左边右指针在基点右边则交换两个指针当前值在每一次交换后两个指针均向右向左移动。依次递归则完成排序。
取中间值为基点如果递归调用时将j换成i那么x取值时需要向上取整否则会造成边界问题
建议读者用不同的数组根据代码逻辑模拟 方便理解
void QuickSort(int a[] , int l , int r){if ( l r ) return ;int i l - 1, j r 1, x a[l r 1] ; //注意x的取值与下面的函数递归调用的参数有关while( i j ){while( a[i] x );while( a[--j] x );if( i j ) swap(a[i] , a[j]);}QuickSort(a , l , j);QuickSort(a , j 1 , r);
}void QuickSort(int a[] , int l , int r){if ( l r ) return ;int i l - 1, j r 1, x a[l r 1 1] ; //注意x的取值与下面的函数递归调用的参数有关while( i j ){while( a[i] x );while( a[--j] x );if( i j ) swap(a[i] , a[j]);}QuickSort(a , l , i - 1);QuickSort(a , i , r);
}