排序后丢失"some"十进制值

Losing "some" decimal values after sorting

本文关键字:some 十进制 排序      更新时间:2023-10-16

这是一个奇怪的问题(无论如何对我来说)。

我正在为班级做一个基本的排序作业。每种排序都在工作,除了在排序后它会删除某些值的小数点之后的值。阵列来自单独的文件。

预排序为:[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;
} 

好消息是我所有的排序都有效,我只需要弄清楚为什么这些数字没有正确显示。

temp的定义更改为

double temp;

当数组中的值被赋值给temp时,它会被截断。因此,小数部分被切断。
double幸运地保持其全部值的那个出现是因为它没有分配给temp;它已经按正确的顺序排列了。


笔记:

  • 尽可能使用C++标准库;不要重新发明轮子。因此,请改用std::swap1

    std::swap(bubArray[i], bubArray[i + 1]);
    

1 感谢@PeteBecker!