算法学习-快速排序

1、从需要排序的数组中选取一个基数通常选取头元素或者尾元素),例如选取数组a[n]中的中间元素,a[l + r >> 1]

2、遍历整个数组,将小于基数的数组元素放到基数的左边,大于的放到基数右边。

3、依次递归左右两边的数组元素即可完成排序。l和r每次选取要递归元素的左右端点即可

//快速排序模板
int arr[N];

void Quicksort(int l, int r, int arr[]) //传入数组左端点,右端点,和数组
{
    if(l >= r) return;
    int i = l - 1, j = r + 1, mid = arr[l + r >> 1]; //mid 每次取数组的中间值
  // 将小于mid的数组元素放到mid的左边,大于的放到mid右边
    while(i < j)
    {
        do i++; while(arr[i] < mid);
        do j--; while(arr[j] > mid);

        if(i < j) swap(arr[i], arr[j]);
    }
  //递归 Quicksort(l, j, arr); Quicksort(j
+1, r, arr); }

 

posted @ 2020-08-30 20:49  F_jin  阅读(105)  评论(0)    收藏  举报