排序算法
插入排序(耗时:118.90 ms 10000条数据)
从第二个数开始,跟前一个数比较,找到对应位置插入
int InsertSort(int *pArray, int MaxLen)
{
int i = 0;
int j = 0;
int Temp = 0;
for (j = 1; j < MaxLen; j++)
{
Temp = pArray[j];
for (i = j; i > 0 && Temp < pArray[i-1]; i--)
{
pArray[i] = pArray[i-1];
}
pArray[i] = Temp;
}
return 0;
}
希尔排序(耗时:4.24 ms 10000条数据)
对每个子表进行插入排序,第一趟步长默认为n/2,第二趟步长为d/2,直至步长为1为止
int ShellSort(int *pArray, int MaxLen)
{
int step = 0;
int i = 0;
int j = 0;
int temp = 0;
for (step = MaxLen / 2; step > 0; step /= 2)
{
for (j = step; j < MaxLen; j++)
{
temp = pArray[j];
for (i = j; i >= step && temp < pArray[i-step]; i -= step)
{
pArray[i] = pArray[i-step];
}
pArray[i] = temp;
}
}
return 0;
}
冒泡排序(耗时:323.57ms 10000条数据)
将待排序数列中的元素两两进行比较,直到将最大的数移动到末尾,一共进行n-1趟
int BubbleSort(int *pArray, int MaxLen)
{
int j = 0;
int i = 0;
int temp = 0;
for (j = 0; j < MaxLen-1; j++)
{
for (i = 0; i < MaxLen-1-j; i++)
{
if (pArray[i] > pArray[i+1])
{
temp = pArray[i];
pArray[i] = pArray[i+1];
pArray[i+1] = temp;
}
}
}
return 0;
}
选择排序(耗时:176.69 ms 10000条数据)
每次从待排序的数列中选出最小(或最大)的一个元素,存放在数列的起始位置,直到全部待排序的元素排完
int SelectSort(int *pArray, int MaxLen)
{
int Min = 0;
int Temp = 0;
int i = 0;
int j = 0;
for (j = 0; j < MaxLen-1; j++)
{
Min = j;
for (i = j+1; i < MaxLen; i++)
{
if (pArray[i] < pArray[Min])
{
Min = i;
}
}
if (Min != j)
{
Temp = pArray[j];
pArray[j] = pArray[Min];
pArray[Min] = Temp;
}
}
return 0;
}
快速排序(耗时:2.07 ms 10000条数据)
选择一个基准元素,将列表中的元素分割为两部分,使得左边部分的所有元素小于基准元素,右边部分的所有元素大于基准元素,然后对这两部分分别进行递归排序。
int QuickSort(int *pArray, int Low, int High)
{
int Key = 0;
int j = High;
int i = Low;
Key = pArray[Low];
while (i < j)
{
while (i < j && pArray[j] >= Key)
{
j--;
}
pArray[i] = pArray[j];
while (i < j && pArray[i] <= Key)
{
i++;
}
pArray[j] = pArray[i];
}
pArray[i] = Key;
if (i-1 > Low)
{
QuickSort(pArray, Low, i-1);
}
if (i+1 < High)
{
QuickSort(pArray, i+1, High);
}
return 0;
}