求问
  • 板块灌水区
  • 楼主Jimmy_Cao
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/9/17 22:55
  • 上次更新2024/9/17 23:00:08
查看原帖
求问
1351065
Jimmy_Cao楼主2024/9/17 22:55

自己写的快排

#include <iostream>
using namespace std;
int n, a[1000];
void QuickSort(int start, int end) {
	if (start < end) {
		int base = a[start], left = start, right = end;
		while (left < right) {
			while (left < right && a[right] > base) right--;
			a[left] = a[right];
			while (left < right && a[left] < base) left++;
			a[right] = a[left];
		}
		a[left] = base;
		QuickSort(start, left - 1);
		QuickSort(right + 1, end);
	}
}
int main() {
	cin >> n;
	for (int i = 1; i <= n; i++) cin >> a[i];
	QuickSort(1, n);
	for (int i = 1; i <= n; i++) cout << a[i] << ' ';
} 

但是在某sdn上看到了这个代码

        if(left < right){
            int pos = partition(arr, left, right);
            quickSort(arr, left, pos - 1);
            quickSort(arr, pos + 1, right);
        }
    }
    public int partition(int[] arr, int left, int right){
        int base = arr[left];
        while(left < right){
            while(left < right && arr[right] >= base){
                right--;
            }
            arr[left] = arr[right];
            while(left < right && arr[left] <= base){
                left++;
            }
            arr[right] = arr[left];       
        }
        arr[left] = base;
        return left;
    }
}

看的不是很懂,有没有大佬讲解一下做了什么优化吗?

2024/9/17 22:55
加载中...