1、用第三个变量值交换
int a = 1;
int b = 2;
int c = a;
a = b;
b = c;
2、用加减法交换
a = a + b;
b = a - b;
a = a - b;
或
a = a - b;
b = a + b;
a = b - a;3、用异或(XOR)法交换
a = a ^ b;
b = a ^ b;
a = a ^ b;详细可看codeproject上一篇文章 <<神奇的异或 The Magical Exclusive OR (XOR)>>下面我们要在冒泡排序算法中测试一下这三种交换方法的效率
代码如下 | 复制代码 |
public enum EChangeType { /// <summary> /// 用第三方变量temp进行前后值交换 /// </summary> ThridVar, /// <summary> /// 用a=a+b;b=a-b;a=a-b 计算方法进行前后值交换 /// </summary> Js, /// <summary> /// 用a=a^b;b=a^b;a=a^b 计算方法进行前后值交换 /// </summary> XOR }/// <summary> /// 冒泡排序算法: /// a、首先将所有待排序的数字放入工作列表中 /// b、从列表的第一个数字到倒数第二个数字,逐个检查:若某一位上的数字大于他的下一位,则将它与它的下一位交换 /// c、重复2号步骤,直至再也不能交换 /// </summary> public class BubbleSort { public void Sort(int[] arrInt, EChangeType type) { System.Diagnostics.Stopwatch st = new System.Diagnostics.Stopwatch(); st.Start(); int count = 0; int temp; bool hasExchangeAction; //记录此次大循环中相邻的两个数是否发生过互换(如果没有互换,则数组已经是有序的) for (int i = 0; i < arrInt.Length - 1; i++) for (int j = i + 1; j < arrInt.Length; j++) if (!hasExchangeAction) //如果没有发生过互换,则数组已经是有序的了,跳出循环 static void Main(string[] args)
|
人生无处不PK