使用指向数组的指针进行插入排序

时间:2014-08-04 13:23:41

标签: c++ sorting

我的代码是:

#include <iostream>

using namespace std;
void insertion(int*, int);
int main() {
    int a[6] = {9, 5, 3, 7, 5, 6};
    for (int i = 0; i < 6; i++)    
        cout << a[i] << " ";

    insertion(&a[0], 6);
    cout << "now insertion sort \n";
    for (int x = 0; x < 6; x++)
        cout << a[x] << "\n";
    return 0;
}
void insertion(int* l, int m) {    
    int temp;
    for (int i = 0; i < m; i++) {    
        while (*(l + i) > *(l + 1 + i) && (i > 0)) {
            temp = *(l + i);
            *(l + i + 1) = *(l + i);
            *(l + i) = temp;
            i--;
        }
    }
}

功能排序有什么问题?
我得到的输出是:9 5 5 7 7 7

我应该添加哪些其他细节(这是我在stackoverflow中的第一个疑问)?

1 个答案:

答案 0 :(得分:0)

对于插入排序,您的逻辑并不正确。事实上,你现在所拥有的更接近于泡沫排序(尽管它显然也不太合适)。

对于插入排序,逻辑类似于这样(假设基于0的索引):

for i = 1 to array_length
    if array[i] < array[i-1]
        temp = array[i]
        for j = i downto 1 && temp < array[j-1]
            array[j] = array[j-1]
        array[j-1] = temp
    endif

所以这里的基本思想是,对于每个元素,我们向后搜索数组以找到放置该元素的正确位置。当我们这样做时,我们将元素向上移动一个点,所以当我们到达正确的位置时,我们就有了放置它的位置。

特别注意,这在任何地方都不包含任何类似交换的代码。我们通常不打算像你那样交换相邻的元素。它可能/将会发生在/如果一个元素恰好位于恰好一个位置的位置,但它确实偶然发生。