排序算法之冒泡排序、选择排序

         辞职后今天第一次参加前端开发工程师的面试,本来自己主要是搞后台开发的,不准备去,奈何对方的诚意,还是抱着试试看去的状态去了,后果可想而知,被问到列举几个排序算法,只说出排序算法,惭愧,做了这么久开发,有些基础的东西竟然淡忘,自己确实还需要多扎实基础的东西。这不写两个常用的算法练习下。

        冒泡排序已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],依此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,依此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。优点:稳定,比较次数已知;缺点:慢,每次只能移动相邻两个数据,移动数据的次数多。

       选择排序已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[1]与a[3]的值,若a[1]大于a[3]则交换两者的值,否则不变。再比较a[1]与a[4],依此类推,最后比较a[1]与a[n]的值。这样处理一轮后,a[1]的值一定是这组数据中最小的。再将a[2]与a[3]~a[n]以相同方法比较一轮,则a[2]的值一定是a[2]~a[n]中最小的。再将a[3]与a[4]~a[n]以相同方法比较一轮,依此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。

         下面贴出代码:

代码
using System;
using System.Text;

namespace SortArithmetic
{
public class MyClass
{
public static void Main()
{
int[] Nums = RandomNums(3, 27);
ShowNums(
"原数组是: ", Nums);
//ShowNums("排序后是:", BubbleSort(Nums));
ShowNums("排序后是:", SelectSort(Nums));
Console.ReadLine();
}

#region 生成随机int数组
private static int[] RandomNums(int Length, int Count)
{
Random Rand
= new Random(7);
int[] Nums = new int[Count];
for (int c = 0; c < Count; c++)
{
string Result = string.Empty;
for (int i = 0; i < Length; i++)
{
Result
+= Rand.Next(10).ToString();
}
Nums[c]
= Convert.ToInt32(Result);
}
return Nums;
}
#endregion


#region 排序算法:冒泡排序(升序) 排序次数可计算:int[n],n为5那么 6*(6-1)/2
private static int[] BubbleSort(int[] Nums)
{
for (int c = 0; c < Nums.Length-1; c++)
{
for (int i = 0; i < Nums.Length - c - 1; i++)
{
int Temp = Nums[i + 1];
if (Nums[i] > Nums[i + 1])
{
Nums[i
+ 1] = Nums[i];
Nums[i]
= Temp;
}
}
}
return Nums;
}
#endregion

#region 排序算法:选择排序(升序)
private static int[] SelectSort(int[] Nums)
{
for (int c = 0; c < Nums.Length-1; c++)
{
for (int i = c; i < Nums.Length - 1; i++)
{
int Temp = Nums[i+1];
if (Nums[c] > Nums[i + 1])
{
Nums[i
+ 1] = Nums[c];
Nums[c]
= Temp;
}
}
}
return Nums;
}
#endregion

private static void ShowNums(string Msgs, int[] Nums)
{
Console.Write(Msgs);
foreach (int n in Nums)
{
Console.Write(n.ToString()
+ " ");
}
Console.WriteLine();
}


}
}

 

 

 

posted @ 2010-04-08 00:05  funnyzak  阅读(523)  评论(5编辑  收藏  举报