浪费时间的排序——睡眠排序
在家闲来无事,随便写了一个睡眠排序,这个排序实在是太有趣了,发明者是一个天才!!!
基本原理很简单,这里就不说明了,直接上代码!!!
// Sleep Sort -- Based on C++
#include <windows.h>
#include <iostream>
#include <tchar.h>
using namespace std;
VOID Sleep_Sort(INT* ParameterData, INT Length);
DWORD SleepThreadProcedure(LPVOID ParameterData);
INT __i = 0;
VOID main()
{
INT Array[] = { 50,23,69,120,45,1,25,89,2,55,87,6,23,56,88,99,102,503,410,27 };
Sleep_Sort(Array, sizeof(Array) / sizeof(INT));
cout << "Please input anykey to exit!!!" << endl;
_gettchar();
}
VOID Sleep_Sort(INT* ParameterData,INT Length)
{
for (int i = 0; i < Length; i++)
{
HANDLE ThreadHandle = CreateThread(NULL, NULL, (LPTHREAD_START_ROUTINE)SleepThreadProcedure,
&(ParameterData[i]), NULL, NULL);
if (ThreadHandle != NULL)
{
__i++;
CloseHandle(ThreadHandle);
}
}
while (__i != 0)
{
}
}
DWORD SleepThreadProcedure(LPVOID ParameterData)
{
//CRITICAL_SECTION CriticalSection;
//InitializeCriticalSection(&CriticalSection);
INT SleepTime = (INT)(*(INT*)ParameterData);
try
{
if (SleepTime < 0) // 防止睡死过去了
{
throw SleepTime;
}
Sleep(SleepTime);
//EnterCriticalSection(&CriticalSection);
cout << SleepTime << endl;
//LeaveCriticalSection(&CriticalSection);
}
catch (...)
{
}
__i--;
//DeleteCriticalSection(&CriticalSection);
return 0;
}