hai*_*_vi 0 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;
}
Run Code Online (Sandbox Code Playgroud)
好消息是我的所有工作都有效,我只需弄清楚为什么这些数字没有正确显示.
将定义更改temp为
double temp;
Run Code Online (Sandbox Code Playgroud)
指定数组中的值时temp,将截断该值.因此,小数部分被切断.
在一个double幸运地保持它的出现充分的价值,因为它没有被分配到temp; 它已经是正确的顺序.
笔记:
尽可能使用C++标准库; 不要重新发明轮子.因此,请std::swap改用1:
std::swap(bubArray[i], bubArray[i + 1]);
Run Code Online (Sandbox Code Playgroud)1感谢@PeteBecker!