|
修改点1:取消break条件(这个完全错误),通过缩短循环长度改进
修改点2:每次找min和max前,如果arr[min]>arr[max],先交换
修改后算法:
void ssortx(int *arr, int len)
{
for (int i = 0; i < len - 1 - i; i++)
{
int min = i;
int max = len - 1 - i;
if (arr[min] > arr[max]) swap(arr, min, max);
for(int j = i + 1; j < len - 1 - i; j++)
{
if (arr[j] < arr[min]) min = j;
if (arr[j] > arr[max]) max = j;
}
swap(arr, i, min);
swap(arr, len - 1 - i, max);
}
}
执行结果:
12 45 6 1 6521 7 861 2376 73 2 4 1
1 1 2 4 6 7 12 45 73 861 2376 6521
执行10w次,速度显著提高
ps:等其他人试试 |
|