识别此排序算法

时间:2018-12-08 17:14:02

标签: algorithm sorting

在浏览我大学一年级时编写的旧代码时,我发现以下代码段标记为“冒泡排序”。 (这里n是数组的大小;例如,对于10个元素的数组,n = 10)。

for(int i = 0; i < n; i++)
    for(int j = i + 1; j < n; j++) {
        if(arr[i] > arr[j]) {
            int temp  = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }

现在,我可以说这肯定不是冒泡排序,但可能执行起来很差。事实是可行,我很好奇这是一种已经存在的算法,还是我自己提出来的算法,尽管它效率很低。

1 个答案:

答案 0 :(得分:4)

这是选择排序的较差实现。进行参考实施(from Wikipedia):

for (j = 0; j < n-1; j++) {
    int iMin = j;
    for (i = j+1; i < n; i++) {
        if (a[i] < a[iMin]) {
            iMin = i;
        }
    }

    if (iMin != j) {
        swap(a[j], a[iMin]);
    }
}

您的窥探器没有在未排序部分中找到最小值,而是通过交换将其放置在已排序部分的末尾,而是在每次发现“潜在最小值”时都进行交换,该值小于末尾值的排序部分。这是低效的,因为交换只比索引分配花费更多。