我有一个实现选择排序算法的简单示例:
tkinter button,entry
问题是,当使用临时对象交换值时,效果很好,但是使用Xor运算符,则会得到错误的结果!
以下是使用Xor运算符的输出:
int main(){
vector<int> vi{ 5, 7, 23, 7, 23, 5,
77, 10, 57, 23, 2 };
int min = 0;
for(int i = 0; i < vi.size() - 1; ++i){
min = i;
for(int j = i + 1; j < vi.size(); ++j){
if(vi[j] < vi[min]){
min = j;
}
}
vi[i] ^= vi[min];
vi[min] ^= vi[i];
vi[i] ^= vi[min];
//int tmp = vi[i];
//vi[i] = vi[min];
//vi[min] = tmp;
}
for(auto i : vi)
cout << i << ", ";
cout << endl;
cout << endl;
}
这是使用临时对象的正确结果:
2, 5, 5, 0, 7, 10, 23, 23, 23, 57, 77,
答案 0 :(得分:7)
当i == min
出现时:
vi[i] ^= vi[i];
vi[i] ^= vi[i];
vi[i] ^= vi[i];
与
相同 vi[i] = 0;
可读性差,效率低,并且不如swap那样总会起作用。
您应该使用
std::swap(vi[i], vi[min]);