您的位置:首页 > 其它

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

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

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

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

下面贴出代码:

代码

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为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();
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐