排序后丢失 "some" 个小数值
Losing "some" decimal values after sorting
这是一个奇怪的问题(无论如何对我来说)。
我正在为 class 做一个基本的排序作业。除了在排序之后它会删除某些值的小数点后的值之外,每种排序都有效。该数组来自一个单独的文件。
预排序为:
[1.25, 3.45, 6.3, 2.7]
排序后:
[1, 2, 3.45, 6]
这让我感到非常困惑,因为它并没有影响到所有人。
所以这是我的好 ole bubbleSort。 (这是我能做到的最短的 post)
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;
}
好消息是我的所有排序都有效,我只需要弄清楚为什么这些数字显示不正确。
将temp
的定义改为
double temp;
当数组中的值分配给 temp
时,它会被截断。因此,小数部分被截去。
那个double
幸运地保持其完整值的出现是因为它还没有分配给temp
;它的顺序已经正确了。
备注:
尽可能使用C++标准库;不要重新发明轮子。因此,使用 std::swap
代替 1:
std::swap(bubArray[i], bubArray[i + 1]);
1 感谢@PeteBecker!
这是一个奇怪的问题(无论如何对我来说)。
我正在为 class 做一个基本的排序作业。除了在排序之后它会删除某些值的小数点后的值之外,每种排序都有效。该数组来自一个单独的文件。
预排序为: [1.25, 3.45, 6.3, 2.7]
排序后: [1, 2, 3.45, 6]
这让我感到非常困惑,因为它并没有影响到所有人。 所以这是我的好 ole bubbleSort。 (这是我能做到的最短的 post)
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;
}
好消息是我的所有排序都有效,我只需要弄清楚为什么这些数字显示不正确。
将temp
的定义改为
double temp;
当数组中的值分配给 temp
时,它会被截断。因此,小数部分被截去。
那个double
幸运地保持其完整值的出现是因为它还没有分配给temp
;它的顺序已经正确了。
备注:
尽可能使用C++标准库;不要重新发明轮子。因此,使用
std::swap
代替 1:std::swap(bubArray[i], bubArray[i + 1]);
1 感谢@PeteBecker!