我编写了一个冒泡排序算法,该算法使用字符串比较对动态分配的数组进行排序。
这是我的代码:
void AddressBook::bubble_sort_address_book(){
bool swapped = true;
while(swapped){
swapped = false;
for(int i = 0; i < noOfEmployees; i++){
if(employees[i].combined_name() > employees[i+1].combined_name()){
Employee temp_employee = employees[i+1];
employees[i+1] = employees[i];
employees[i] = temp_employee;
}
}
}
}
我的问题很明显,但是我似乎仍然无法弄清楚如何解决它:代码有时在网上失败(以未定义的方式):
Employee temp_employee = employees[i+1]
这很明显,因为如果
i
等于数组的末尾,则使用i+1
访问内存将导致未定义的行为。但是,如果我用noOfEmployees-1
停止for循环,则不会发生,但第一个元素永远不会排序(很明显)。如何正确实施冒泡排序?这似乎是一件微不足道的任务。我想念什么吗?
最佳答案
纯C中的以下简化版本可以正常工作:
int employees[10]= {3,1,7,6,9,7,1,0,2,6};
int noOfEmployees= 10;
void bubble_sort_address_book(void){
bool swapped = true;
int i;
while(swapped){
swapped = false;
for(i = 0; i < noOfEmployees-1; i++){
if(employees[i] > employees[i+1]){
int temp_employee = employees[i+1];
employees[i+1] = employees[i];
employees[i] = temp_employee;
swapped= true;
}
}
}
}
int main()
{
int i;
bubble_sort_address_book();
for (i=0; i<noOfEmployees; i++) {
printf("emp %d= %d\n", i, employees[i]);
}
return 0;
}
根据您的要求,变量
swapped
的功能是指示在完全通过数组之后没有发生交换,因此它表明该数组现在已排序。关于c++ - C++ Bubble排序动态分配的数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46863962/