#16250: quick sort 會 TLE


elin880508@gmail.com (Murphy Juan)

學校 : 不指定學校
編號 : 89404
來源 : []
最後登入時間 :
2018-12-12 15:13:47
d190. 11462 - Age Sort -- UVa11462 | From: [42.72.159.143] | 發表日期 : 2018-12-12 15:24

我按照quick sort演算法自己刻一個,但是卻會TLE,請各位大大給我一點幫助。

#include<iostream>

using namespace std;

void swap(int *a,int* b)
{
int tmp=*a;
*a=*b;
*b=tmp;
}

int Partition(int* array,int front,int end)
{
int pivot=array[end];
int i=front-1;
for(int j=front;j<=end-1;j++){

if(array[j]<pivot){
i++;
swap(&array[i],&array[j]);
}

}
i++;
swap(&array[i],&array[end]);
return i;
}

void quickSort(int* array,int front,int end)
{
if(front<end){
int pivot=Partition(array,front,end);
quickSort(array,front,pivot-1);
quickSort(array,pivot+1,end);
}
}

int main()
{
int n;
while(cin>>n && n!=0){
int array[n];
for(int i=0;i<n;i++)
cin>>array[i];
quickSort(array,0,n-1);
for(int i=0;i<n-1;i++)
cout<<array[i]<<" ";
cout<<array[n-1]<<endl;

}
return 0;
}
 
#16252: Re:quick sort 會 TLE


freedom501999@gmail.com (帥氣魔方生)

學校 : 不指定學校
編號 : 88611
來源 : [39.8.203.54]
最後登入時間 :
2019-05-30 22:56:25
d190. 11462 - Age Sort -- UVa11462 | From: [27.52.77.116] | 發表日期 : 2018-12-12 16:28

我按照quick sort演算法自己刻一個,但是卻會TLE,請各位大大給我一點幫助。


試著將quick sort跟其他排序結合,例如判斷 front、end 小於20個時就用插入排序

遞迴太多層可能會記憶體溢出或是速度太慢

 
#16253: Re:quick sort 會 TLE


rollfc (胖胖貓)

學校 : 國立清華大學
編號 : 81012
來源 : [36.229.38.137]
最後登入時間 :
2024-12-03 20:11:44
d190. 11462 - Age Sort -- UVa11462 | From: [140.113.208.181] | 發表日期 : 2018-12-12 18:07

原文吃掉

這題一開始的目的就不是要透過"一般排序"的方式(Cost =O(NlogN) )

題目有提到每位國民的年齡不會大於100歲,換句話說必須利用這個性質

如果需要關鍵字可以查詢 Counting Sort

與這題無關但另一種常用的非一般排序叫做 Radix Sort( Cost =O(NL), L代表最大數值的位數長度 )

這是新加坡大學提供的視覺化網站,方便你對照不同排序的過程

https://visualgo.net/en/sorting

 

 
 
ZeroJudge Forum