1045 快速排序 25分

2022-05-30 11:39:16 字數 985 閱讀 3817

這樣是會超時的。。。因為迴圈了很多遍

for (i = 0; i < n; i++) 

} if (flag == 0)

}} if (flag == 0)

}

改了一下

第 2 行是空格分隔的 n 個不同的正整數,每個數不超過 10^9。

演算法思想:

輸入n個數,定義兩個陣列 leftmax, rightmin。leftmax[i]儲存a[i]左邊的數的最大值;rightmin[i]儲存a[i]右邊的數的最小值

第乙個數的leftmax[0] = 0

最後乙個數的rightmin[0] = 1000000000

然後再迴圈一遍如果 a[i] > leftmax[i] && a[i] < rightmin[i],就是主元!!

這樣只需迴圈3遍!

#include#includeusing namespace std;

#define maxsize 100100

#define inf 1000000000 //定義乙個

int main()

leftmax[0] = 0;

//左邊第乙個數的leftmax的是自己,題目中給出的是不同的數

for (i = 1; i <= n-1; i++)

rightmin[n - 1] = inf;

for (i = n - 2; i >= 0; i--)

for (i = 0; i < n; i++)

} cout << sum << endl;

sort(result, result + sum);

for (i = 0; i < sum; i++)

} cout << endl; //測試點3---格式錯誤----醉了

return 0;

}

1045 快速排序 (25 分)

著名的快速排序演算法裡有乙個經典的劃分過程 我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。給定劃分後的 n 個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?例如給定 n 5 n 5 n 5,排列是1 3 2 4 5。則 ...

1045 快速排序 (25 分

1045 快速排序 25 分 著名的快速排序演算法裡有乙個經典的劃分過程 我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。給定劃分後的 n 個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?例如給定 n 5 n 5 n 5,...

1045 快速排序 25分

著名的快速排序演算法裡有乙個經典的劃分過程 我們通常採用某種方法取乙個元素作為主元,通過交換,把比主元小的元素放到它的左邊,比主元大的元素放到它的右邊。給定劃分後的 n 個互不相同的正整數的排列,請問有多少個元素可能是劃分前選取的主元?例如給定 n 5 n 5 n 5,排列是1 3 2 4 5。則 ...