排序后丢失 "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!