这是一个奇怪的问题(反正对我来说)。
我正在为班级做基本的排序任务。每种排序都有效,除了排序之后它会删除某些值的小数点后的值。该数组来自一个单独的文件。
预先排序将是: [1.25,3.45,6.3,2.7]
排序后: [1,2,3.45,6]
这对我来说完全令人困惑,因为它并没有影响到所有这些。 所以这是我的好气泡。 (这是我发布的最短的一个)
void bubbleSort(double bubAray[], int size){
int i=0;
int j=0;
int count=0;
int temp;
bool swap = true;
cout <<"Pre Bubblesort" <<endl;
for(i=0; i<size; i++)
cout <<bubAray[i] <<endl;;
while (swap) {
swap=false;
j++;
for(int i=0; i<size-j; i++){
count++;
if(bubAray[i]>bubAray[i+1]){
temp=bubAray[i];
bubAray[i]=bubAray[i+1];
bubAray[i+1]=temp;
swap = true;
}
}
}
cout <<endl <<"Final Bubble Sort" <<endl <<endl;
for(i=0; i<size; i++)
cout <<bubAray[i] <<endl;
cout <<endl <<"Number of Bubble Sort Comparisons = " <<count <<endl;
}
好消息是我的所有工作都有效,我只需弄清楚为什么这些数字没有正确显示。
答案 0 :(得分:5)
将temp
的定义更改为
double temp;
当数组中的值分配给temp
时,它将被截断。因此,小数部分被切断
幸运地保持其全部值的double
因为尚未分配给temp
而出现;它已经是正确的顺序了。
注意:
尽可能使用C ++标准库;不要重新发明轮子。因此,请使用std::swap
代替 1 :
std::swap(bubArray[i], bubArray[i + 1]);
1 感谢@PeteBecker!