使用指向数组的指针进行插入排序
Insertion sort using pointer to an array
我的代码是:
#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的代码。我们通常不打算像你那样交换相邻的元素。当/如果一个元素刚好错位一个位置时,它可以/将会发生,但是当它发生时,它几乎是偶然的。
相关文章:
- 这是插入排序的正确实现吗?
- 使用列表 STL 递归进行插入排序
- 列表 iter 不取消引用 使用列表进行插入排序
- 如何使插入排序更快?
- 插入排序的最小交换
- C++为什么我的指针选择排序中存在分段错误?
- 如果我们不创建一个新节点并使用指针插入数据并建立链接(在链表中)怎么办?
- 对元素的向量或指向元素的指针进行排序
- 将唯一指针插入std::映射
- 智能指针的排序向量:神秘崩溃
- 双链表C++上的插入排序
- 如何在插入排序中使用 replace() 使语句变得不必要
- 向量<pointer>:插入(迭代器,指针)插入垃圾值
- 无法将智能指针插入地图
- C++插入排序错误功能不起作用
- 如何在不通过插入排序更改原始矢量的情况下对 2D 矢量进行排序
- 插入排序打印错误的输出
- 从矢量末尾开始的插入排序
- 将节点插入到不带头指针的排序列表中
- 使用指向数组的指针进行插入排序