我按照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;
}
我按照quick sort演算法自己刻一個,但是卻會TLE,請各位大大給我一點幫助。
試著將quick sort跟其他排序結合,例如判斷 front、end 小於20個時就用插入排序
遞迴太多層可能會記憶體溢出或是速度太慢
原文吃掉
這題一開始的目的就不是要透過"一般排序"的方式(Cost =O(NlogN) )
題目有提到每位國民的年齡不會大於100歲,換句話說必須利用這個性質
如果需要關鍵字可以查詢 Counting Sort
與這題無關但另一種常用的非一般排序叫做 Radix Sort( Cost =O(NL), L代表最大數值的位數長度 )
這是新加坡大學提供的視覺化網站,方便你對照不同排序的過程
https://visualgo.net/en/sorting