算法实现(一)
1、 不使用中间变量,一句代码实现两个数值的交换
int a = 20, b = 30; a =b+ (b = a)*0; Console.WriteLine("a={0},b={1}", a, b);输出的结果是a=30,b=20
2、 字符串反转,ABC-----》CBA
第一个字符和最后一个字符交换,第二个字符与倒数第二个字符交换,以此类推
private static string ReverseString(string input) { char[] chs = input.ToCharArray(); for (int i = 0; i < chs.Length / 2; i++) { char cTemp = chs[i]; chs[i] = chs[chs.Length - 1 - i]; chs[chs.Length - 1 - i] = cTemp; } return new string(chs); }3、 顺序查找:在数组a的前n个元素中查找x
按顺序逐个比较,直到找到或找不到。
int Search ( int []num, int n, int x ) { for (int i=n-1; i>=0; i-- ) if ( num[i]==x ) return i; return -1; // -1表示找不到 }
所有执行路径都要有正确的返回值,不要忘记最后那个return语句。
4、折半查找
待查找的表必须是有序的,先从中间开始比较,比较一次至少抛弃一半元素,逐渐缩小范围,直到查找成功或失败。
int BinarySearch ( int []a, int n, int x ) { Int low = 0,high = n-1; while ( low <= high ) { int mid = ( low + high )/2; // 折半 if ( a[mid]==x ) return mid; // 找到 else if ( x<a[mid] ) // x位于低半区 [low..mid-1] high = mid -1; else // x位于高半区 [mid+1..high] low = mid + 1; } return -1; // -1表示未找到 }
递归版本:
int BinarySearch (int []a, int low, int high, int x ) { if ( low>high ) return -1; // 查找失败 int mid = (low+high)/2; // 折半 if ( a[mid]==x ) return mid; // 找到 else if ( x<a[mid] ) return BinarySearch (a, low, mid-1, x); else return BinarySearch (a, mid+1, high, x); }
药不医假病,酒不解真愁。