#include <iostream>
using namespace std;
int main()
{
int n,m,i,j;
while(cin>>n>>m)
{
if(n==0&&m==0)
{
break;
}
int arr[n],t;
for(i=0;i<n;i++)
{
cin>>arr[i];
}
for(i=0;i<n-1;i++)
{
for(j=0;j<n-i-1;j++)
{
if((arr[j]%m)<(arr[j+1]%m))
{
}
else if((arr[j]%m)>(arr[j+1]%m))
{
t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
else if((arr[j]%m)==(arr[j+1]%m))
{
if((arr[j]&1)==0&&(arr[j+1]&1)!=0)//偶
{
t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
else if((arr[j]&1)==0 && (arr[j+1]&1)==0 && arr[j]>arr[j+1])
{
t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
else if((arr[j]&1)!=0 && (arr[j+1]&1)!=0 && arr[j]<arr[j+1])
{
t=arr[j+1];
arr[j+1]=arr[j];
arr[j]=t;
}
}
}
}
for(i=0;i<n;i++)
{
printf("%d\n",arr[i]);
}
}
printf("0 0");
}
原文吃掉,先說結論:堅持採用 N^2 Sort 的話就把 SelectionSort 改為 InsertionSort,最保險就是使用內建的 QuickSort 傳入 lambda 函數
兩者在最糟糕的情況時雖然都是 N^2 沒錯,但是當了解底層實作方式可以發現 SelectionSort 不管哪種情況都是 N^2 但是 InsertionSort 最好是 O(N)
實作後可以壓線過關,是說最近 Judge 越來越慢不知道是不是開太多競賽的關係...?