排序后丢失“一些”十进制值

时间:2016-01-30 14:15:48

标签: c++ sorting decimal

这是一个奇怪的问题(反正对我来说)。

我正在为班级做基本的排序任务。每种排序都有效,除了排序之后它会删除某些值的小数点后的值。该数组来自一个单独的文件。

预先排序将是: [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;
} 

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

1 个答案:

答案 0 :(得分:5)

temp的定义更改为

double temp;

当数组中的值分配给temp时,它将被截断。因此,小数部分被切断 幸运地保持其全部值的double因为尚未分配给temp而出现;它已经是正确的顺序了。

注意:

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

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

1 感谢@PeteBecker!