1、 请编程实现一个冒泡排序算法?
int [] array = new int [*] ; int temp = 0 ; for (int i = 0 ; i < array.Length - 1 ; i++) { for (int j = i + 1 ; j < array.Length ; j++) { if (array[j] < array[i]) { temp = array[i] ; array[i] = array[j] ; array[j] = temp ; } } }
2、选择排序算法
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 选择排序 { //选择排序与冒泡排序比较的次数是一样的 //选择排序的交换次数要比冒泡排序的交换次数少 class Program { static void Main(string[] args) { int[] arr = { 15, 0, 10, 50, 55, 35, 15, 20 }; //待排序数组 SelectSort(arr); //调用选择排序函数 } private static void SelectSort(int[] arr) { int temp = 0; for (int i = 0; i < arr.Length - 1; i++) { int minVal = arr[i]; //假设 i 下标就是最小的数 int minIndex = i; //记录我认为最小的数的下标 for (int j = i + 1; j < arr.Length; j++) //这里只是找出这一趟最小的数值并记录下它的下标 { //说明我们认为的最小值,不是最小 if (minVal > arr[j]) //这里大于号是升序(大于是找出最小值) 小于是降序(小于是找出最大值) { minVal = arr[j]; //更新这趟最小(或最大)的值 (上面要拿这个数来跟后面的数继续做比较) minIndex = j; //记下它的下标 } } //最后把最小的数与第一的位置交换 temp = arr[i]; //把第一个原先认为是最小值的数,临时保存起来 arr[i] = arr[minIndex]; //把最终我们找到的最小值赋给这一趟的比较的第一个位置 arr[minIndex] = temp; //把原先保存好临时数值放回这个数组的空地方, 保证数组的完整性 } //控制台输出 foreach (int item in arr) { Console.WriteLine("C#遍历:{0}", item); } } } }
3、求以下表达式的值,写出您想到的一种或几种实现方法: 1-2+3-4+……+m
法一: int sum=0; bool flag=true; for(int i=1;i<=m;i++) { if(flag) sum+=i; else sum-=i; flag=!flag; } return sum; 法二: if((m%2)>0) return m/2; else return -m/2;
4、a=10,b=15,在不用第三方变量的前提下,把a,b的值互换
int a=10;int b=15; a=a+b; b=a-b; a=a-b;
5、 一列数的规则如下: 1、1、2、3、5、8、13、21、34...... 求第30位数是多少,用递归算法实现。
public class MainClass { public static void Main() { Console.WriteLine(Foo(30)); } public static int Foo(int i) { if (i <= 0) return 0; else if(i > 0 && i <= 2) return 1; else return Foo(i -1) + Foo(i - 2); } }