2013-04-10 2 views
0

제 질문은 내가 잘못하고있는 것입니다. 삽입 기능이 올바르게 작동하지 않습니다. 목록 자체를 검색 할 수 없습니다. 그리고이 때문에 내 선택 정렬이 실행되지 않습니다. 어떤 도움을 주시면 감사하겠습니다.배열 기반 목록에 선택 정렬 구현

헤더 :

/** @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; 
} 

답변

0

선택 정렬이 확실히 잘못 : 문자열

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; 
} 

귀하의 삽입 기능 거래,하지만 당신은 종류에 선택을하고 정수.

typedef string ListItemType; 

ListItemType으로 정의됩니다.