C# 面试题二

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); 
 } 
 }
复制代码

 

posted @   爱生活,爱代码  阅读(145)  评论(0编辑  收藏  举报
编辑推荐:
· 聊一聊坑人的 C# MySql.Data SDK
· 使用 .NET Core 实现一个自定义日志记录器
· [杂谈]如何选择:Session 还是 JWT?
· 硬盘空间消失之谜:Linux 服务器存储排查与优化全过程
· JavaScript是按顺序执行的吗?聊聊JavaScript中的变量提升
阅读排行:
· 2000 Star,是时候为我的开源项目更新下功能了
· 好消息,在 Visual Studio 中可以免费使用 GitHub Copilot 了!
· 工作中这样用MQ,很香!
· 使用 .NET Core 实现一个自定义日志记录器
· 没事别想不开去创业!
历史上的今天:
2017-05-08 备忘录模式实例1
2017-05-08 加密程序-注册方法实现
2017-05-08 web项目的发布
点击右上角即可分享
微信分享提示