(一点点背景,所以你不要讨厌我,如果这篇文章多余或对于这个论坛来说太基础,我最深的道歉) -
我是一名高中生和初学者,他刚刚开始学习c ++,在我学习数组时,我遇到了插入排序算法。一开始理解起来非常混乱,但在观看了几个视频后我尝试制作自己的版本。
程序本身非常简单:我向用户询问数组的大小,然后是元素。然后我想按升序对元素进行排序,但问题是,输出并不是我所期望的。
因此,当用户输入类似[4,2,1,3]的内容时,我会看到[1,1,2,3]而不是打印[1,2,3,4]! 该程序只有一个函数,它只打印数组并为除最后一个元素之外的每个元素添加逗号。请不要关闭这个帖子,因为我搜索的时间很长,找不到类似的东西,如果这是多余的话,我再次感到非常抱歉。
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
void DisplayArray (int size, int array[]) {
for (int k=0; k< size; k++) {
if (k!=size-1) {
cout << array[k] << ", ";
}
else {
cout << array[k] << ".";
}
}
}
int main(int argc, const char * argv[]) {
int size;
cin >> size;
int array[size-1];
for (int j=0; j< size; j++) {
cin >> array[j];
}
for (int i =1; i<size; i++) {
int value = array[i];
int m = i - 1;
while (m >= 0){
if (value < array[m]) {
array [i] = array[m];
array [m] = value;
m = m - 1;
}
else {
break;
}
}
}
DisplayArray(size, array);
}
答案 0 :(得分:1)
int array[size-1];
for (int j=0; j< size; j++) {
cin >> array[j];
}
这里你用size-1
声明了一个数组,因此合法索引是[0,size- 2 ],而不是[0,size- 1 ]
正如您期望包含size
元素的数组一样,只需声明为int array[size];
。
答案 1 :(得分:0)
除了音色的答案(int array[size];
)之外,以下块存在问题
for (int i =1; i<size; i++) {
int value = array[i];
int m = i - 1;
while (m >= 0){
if (value < array[m]) {
array [i] = array[m];
array [m] = value;
m = m - 1;
}
else {
break;
}
}
}
行array[i] = array[m]
以错误的方式覆盖array[i]
。它应该是array[m + 1] = array[m]
。
在可读性方面,该块可能会有所改善;
for (int i = 1; i < size; i++) {
int j = i;
while (j > 0) {
if (array[j] < array[j - 1]) {
// swap two elements, could be done with std::swap()
int tmp = array[j];
array [j] = array[j - 1];
array [j - 1] = tmp;
j = j - 1;
} else {
// beginning of an array is sorted, stop iterate
break;
}
}
}
答案 2 :(得分:0)
array[size]
不使用array[size-1]
,因为array[0,1,2,3,----size-1]
的数据索引为array[size]
且
对于插入排序使用array [m+1] = array[m]
替换array[i]=array[m]
,因为当您使用array[i]
时,循环i
已修复但m
更改。所以它解雇插入排序技术。
希望它是okk。
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
void DisplayArray (int size, int array[])
{
for (int k=0; k< size; k++)
{
if (k!=size-1)
{
cout << array[k] << ", ";
}
else
{
cout << array[k] << ".";
}
}
}
int main()
{
int size;
cin >> size;
int array[size];
for (int j=0; j< size; j++)
{
cin >> array[j];
}
for (int i =1; i<size; i++)
{
int value = array[i];
int m = i - 1;
while (m >= 0)
{
if (value < array[m])
{
array [m+1] = array[m];
array [m] = value;
m = m - 1;
}
else
{
break;
}
}
}
DisplayArray(size, array);
}