在基于数组的列表上实现选择排序
Implementing a Selection Sort on an Array Based List
我的问题是我做错了什么。插入函数不能正常工作。我无法检索列表本身。因为这个,我的选择排序不会执行。如有任何帮助,不胜感激。
头:/** @file ListA.h */
#include <string>
using namespace std;
const int MAX_LIST = 100;
typedef string ListItemType;
class List
{
public:
List();
bool isEmpty() const;
int getLength() const;
void insert(int index, const ListItemType& newItem, bool& success);
void retrieve(int index, ListItemType& dataItem, bool & success) const;
void remove(int index, bool& success);
int selectionSortArray(int numdata[], int xnums);
List selectionSort(List selectList);
private:
ListItemType items[100];
int size;
int translate(int index) const;
};
CPP:
/** @file ListA.cpp */
#include "ArrayList.h" // header file
#include <iostream>
#include <fstream>
List::List() : size()
{
}
bool List::isEmpty() const
{
return size == 0;
}
int List::getLength() const
{
return size;
}
void List::insert(int index, const ListItemType& newItem, bool& success)
{
success = (index >= 1) &&
(index <= size + 1) &&
(size < MAX_LIST);
if (success)
{
for (int pos = size; pos >= index; --pos)
items[translate(pos + 1)] = items[translate(pos)];
items[translate(index)] = newItem;
++size;
}
}
void List::remove(int index, bool& success)
{
success = (index >= 1) && (index <= size);
if (success)
{
for (int fromPosition = index + 1;
fromPosition <= size;
++fromPosition)
items[translate(fromPosition - 1)] = items[translate(fromPosition)];
--size; // decrease the size of the list by one
} // end if
} // end remove
void List::retrieve(int index, ListItemType& dataItem,
bool& success) const
{
success = (index >= 1) && (index <= size);
if (success)
dataItem = items[translate(index)];
}
int List::translate(int index) const
{
return index - 1;
}
//List List::selectionSort(List selectList)
//{
//return selectList;
int List::selectionSortArray(int numdata[], int xnums)
{
int tmp;
for (int i = 0; i < xnums -1; i++)
for (int j = i+1; j < xnums; j++)
if (numdata[i] > numdata[j])
{
tmp = numdata[i];
numdata[i] = numdata[j];
numdata[j] = tmp;
}
//for( int i = 0; i < 5; i++)
//cout << numdata[i] << " ";
return *numdata;
}
int main()
{
ListItemType insertType = "listItem1";
ListItemType retrieveType = "listitem2";
int numberofitems;
cout << "Please enter the number of data items:" << endl;
cin >> numberofitems;
cout << endl;
cout << "Please enter the data items, one per line:" << endl;
int listofitems[numberofitems];
List myArrayList;
cout << myArrayList.getLength() << endl;
if (myArrayList.isEmpty()) // tests before
{
cout << "This list is empty n" << endl;
}
else
{
cout << "List is not empty! n"<< endl;
}
bool mainsucc = true;
for (int i = 0; i<numberofitems; i++)
{
cout << "Enter number " << i+1 << " : " << endl;
cin >> listofitems[i];
}
for (int i =0; i <numberofitems; i++){
myArrayList.insert(listofitems[i], insertType, mainsucc);}
cout << "Size of the list is : " << myArrayList.getLength() << endl;
int listRetrieveSize = myArrayList.getLength();
int listRetrieve[listRetrieveSize];
for (int j=0; j<listRetrieveSize; j++)
{
myArrayList.retrieve(listofitems[j], retrieveType, mainsucc);
}
if (myArrayList.isEmpty()) // tests after
{
cout << "This list is empty n" << endl;
}
else
{
cout << "List is not empty! n"<< endl;
}
numberofitems= myArrayList.selectionSortArray(listofitems, numberofitems);
for (int i=0;i>numberofitems;i++)
{
cout<<listofitems[i];
}
return 1;
}
你的选择排序肯定是错误的:
int List::selectionSortArray(int numdata[], int xnums)
{
int tmp;
for (int i = 0; i < xnums -1; i++) {
//you should find the smallest integer inside this for loop
for (int j = i+1; j < xnums; j++) {
if (numdata[i] > numdata[j])
{
//why do you swap inside this for loop?
tmp = numdata[i];
numdata[i] = numdata[j];
numdata[j] = tmp;
}
}//missing closing }
//smap numdata[i] with currently smallest int
}//missing closing }
return *numdata;
}
你的insert函数处理的是字符串,但你做的是整数的选择排序。
typedef string ListItemType;
将string
定义为ListItemType
我很确定你所实现的是冒泡排序算法,而不是选择排序算法
相关文章:
- 使用简单类型列表实现的指数编译时间.为什么
- 如何理解C++中链表的自由列表实现?
- 单链接列表实现,规则为 3
- 使用邻接列表C++实现 Dijkstra
- 内部源代码 - 在链接列表实现中插入元素上的删除会破坏整个应用程序
- 点产品计算链接列表实现
- 跳过 cpp 中的列表实现
- 使用链接列表实现stack类来验证XML文件
- 带有列表实现的逻辑模拟器c++
- C 链接列表实现
- 使用链接列表实现堆栈,调试断言失败
- C++跳过列表实现-返回的值已损坏,内存泄漏
- 链接数组列表实现
- 自定义列表实现迭代器无法访问最后一个元素 (c++)
- 链接列表C++实现
- 使用列表C++实现选择排序
- 为什么头部不改变 - 链接列表实现
- boost 如何将类型列表实现为类的"options"?
- 不同类的成员列表实现不起作用
- 自定义STL列表实现问题