(一)冒泡排序:
该算法需要内外循环两次,外循环是控制整体的排序次数,外排次数=数组长度-1,内排序控制每次的排序比较。
冒泡即因为每次排序的开始都是从数组的最后一位依次跟前一位比,就像气泡从水底冒出来一样,故称之为冒泡排序。
以下代码仅供学习。
using System;
namespace lesson01{
class MainClass {
static void Main(string[] args)
{
int temp;
int[] array = new int[10]{11,45,1,38,84,55,36,13,66,41};
for (int i = 0; i < array.Length; i++)
{
for (int j = i + 1; j < array.Length ; j++)
{
if (array[j] < array[i])
{
temp = array[j];
array[j] = array[i];
array[i] = temp;
}
}
}
for (int j = 0; j < array.Length; j++)
{
Console.Write("{0}"+" ",array[j]);
}
Console.ReadLine();
}
}
}
输出:
(二)递归——在方法内部调用方法本身
1、递归必须有结束条件;
2、将复杂的问题分解为类似的小问题,要求小问题和原问题是一致的,且更加简单;
3、递归是一种算法。
案例一:
using System;
namespace lesson01{
public class Math {
public int F (int n) { //结束条件
if (n >1) { //进行递归
return F (n-1) + n;
} else {
return 1;
}
}
}
class MainClass {
//计算1+2+...+100的值;
//易知f (n) = f (n-1) +1 , (n>1)
//f (n) = 1 , (n=1)
public static void Main ( string[] args ) {
Math m = new Math () ;
Console.WriteLine (m.F(100)) ;
}
}
}
using System;
namespace lesson01{
public class Math{
public int F(int m){ //结束条件
if (m == 1 || m == 2) { //进行递归
return 1;
} else {
return F (m - 1) + F (m - 2);
}
}
}
class MainClass{
//计算斐波那契数列
//f(n)=f(n-1)+f(n+2),n>1
//f(n)=1,(n+1)
public static void Main (string[] arqs){
Math m=new Math();
Console.WriteLine(m.F(30));
}
}
}
循环求解
using System;
namespace lesson01{
class Program{
public static void Main()
{
number(100); //计算1-2+3-4+...+N的值,括号内为N的值.
Console.ReadLine();
}
public static void number(int max) {
int result = 0;
for (int i = 1; i <= max; i++) {
if (i % 2 != 0)
{
result += i;
}
else {
result -= i;
}
}
Console.WriteLine( result);
}
}
}
哈希表应用:
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。
注意事项:你可以假设只有一组答案。样例:给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2].
选择排序,冒泡排序,快速排序,插入排序,希尔排序,归并排序