任何人都可以告诉我std::sort()在<algorithm>头文件中定义的函数中实现了哪种类型的排序技术(冒泡,插入,选择,快速,合并,计数......)?
我有一个三个浮点值的数组,我想按升序对它们进行排序(尽管任何排序算法的顺序都可以很容易地反转).调用std :: sort似乎有点矫枉过正:
float values[3] = {...};
std::sort(values, values + 3);
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
float sorted[3] = {min(values), values[0] + values[1] + values[2] -
min(values) - max(values), max(values)};
Run Code Online (Sandbox Code Playgroud)
但这看起来很丑陋.添加和减去数字也可以改变中间排序元素的值.并且它不容易就地工作.也很有趣:
float sorted[3];
/*for(int i = 0; i < 3; ++ i) { // unroll
sorted[(values[i] > values[0]) + (values[i] > values[1]) +
(values[i] > values[2])] = values[i];
}*/ // this is broken, does not work if two or all values are equal
sorted[(values[0] > values[1]) + (values[0] > values[2])] = values[0];
sorted[(values[1] >= …Run Code Online (Sandbox Code Playgroud)