我可以提高这个选择排序算法的运行时间吗?

标签 c algorithm runtime selection-sort

我一直在尝试编写自己的选择排序算法,并在随机生成的大小为 10000、50000 和 100000 的数组上对其进行测试。我的算法工作正常,但我试图让它尽快工作。在我的机器上,测试分别花费大约 0.45 秒、1.88 秒和 11.77 秒。有什么方法可以改进我的算法,使其运行得更快吗?

void SelectionSort(int array[], int len){

  int temp,i,j,min,minpos;


    for(j=0;j<len;j++){
         minpos=j;

       for(i=j+1;i<len;i++){

           if(array[minpos]>array[i]){
               minpos=i;
            }
         }

      temp=array[j];
      array[j]=array[minpos];
      array[minpos]=temp;

     }

}

最佳答案

如果一个数组只包含两个元素,那么由于外部循环的这种情况,它不会被排序

for(j=0;j<len-2;j++){
        ^^^^^^^

我认为如果在交换数组元素之前检查当前元素和最小元素是否相同,可以提高效率。

所以我想建议以下实现

void SelectionSort( int a[], size_t n )
{
    for ( size_t i = 0; i < n; i++ )
    {
        size_t min = i;;

        for ( size_t j = i + 1; j < n; j++ )
        {
            if ( a[j] < a[min] ) min = j;
        }

        if ( i != min )
        {
            int tmp = a[i];
            a[i] = a[min];
            a[min] = tmp;
        }
    }
}

关于我可以提高这个选择排序算法的运行时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42545824/

相关文章:

c - 如何在c中运行时声明变量

c - 如何从用户空间 C 读取内核模块 (/dev) 文件

c - PAM 模块应该放在哪里?

ios - 这是洗牌的充分方法吗?

objective-c - iOS 应用程序 - 如何制作和调用运行时库/应用程序

java - java数组是如何真正工作的

在 C 中选择枚举还是定义?

c - 重定向到 execlp()

algorithm - 分组集算法

algorithm - 动态规划练习的递归关系