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

Insertion sort using pointer to an array

本文关键字:指针 插入排序 数组      更新时间:2023-10-16
我的代码是:
#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中的第一个疑问)?

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

对于插入排序,逻辑是这样的(假设基于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

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

特别要注意的是,它在任何地方都不包含任何类似swap的代码。我们通常不打算像你那样交换相邻的元素。当/如果一个元素刚好错位一个位置时,它可以/将会发生,但是当它发生时,它几乎是偶然的。