【陷阱】交换排序中交换动作的陷阱
生活随笔
收集整理的這篇文章主要介紹了
【陷阱】交换排序中交换动作的陷阱
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
static void swap(int[] data, int i, int j) {//記得加此條件,data[i]與data[j]相同時異或運算得0if (data[i] != data[j]) {data[i] = data[i] ^ data[j];data[j] = data[i] ^ data[j];data[i] = data[i] ^ data[j];}}static void sort(int[] data, int begin, int end) {if (begin < end) {int cur = data[begin];int i = begin;int j = end + 1;while (true) {while (i < end && cur >= data[++i]);while (j > begin && cur <= data[--j]);if (i < j) {swap(data, i, j);} else {break;}}swap(data, begin, j);sort(data, begin, j - 1);sort(data, j + 1, end);}}public static void main(String[] args) {int[] data = { 2, 1, 3, 8, 4, 9 };sort(data, 0, 5);System.out.println(Arrays.toString(data));}
在上述例子中有3^3的情形發生,最后得出0導致排序有誤。
用異或運算進行數組元素互換時記得比較連個元素值是否相等。
轉載于:https://www.cnblogs.com/crime-king/archive/2013/04/21/3034002.html
總結
以上是生活随笔為你收集整理的【陷阱】交换排序中交换动作的陷阱的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: firebird——Spring hib
- 下一篇: boost库在工作(20)线程之五