前言
上午上课老师通过两个神似的三角形,讲了冒泡排序和选择排序的区别和联系在哪里,恰好下午看到了这样的一写关于该排序算法的一些资料,想了想还是决定试一试,因为出来混总是要还的。
排序
定义
就是使一串记录,按照其中某个或者某个关键字的大小,递增或递减的排列起来的算法。它应用在大量数据处理方面,一个优秀的算法可以节省大量的资源。
分类
这里浅显的说一下:插入排序、选择排序和冒泡排序。
插入排序(C#版)
<span style="font-family:KaiTi_GB2312;font-size:18px;"> /// <summary>
/// 插入排序
/// </summary>
/// <param name="arry"></param>
public static void InsertSort(this int[] arry)
{ //直接插入排序是将待比较的数值与它的前一个数值进行比较;
//所以外层循环是从第二个数值开始的
for (int i = 1; i < arry.Length; i++)
{
//如果当前元素小于其前面的元素时
if (arry[i] < arry[i - 1])
{
//用一个变量来保存当前比较值,因为当一趟比较完成时,我们要将待比较数值置入
//比它小的数值的后一位;
int temp = arry[i];
int j = 0;
for (j = i - 1; j >= 0 && temp < arry[j]; j--)
{
arry[j + 1] = arry[j];//从无序区选出最大的;将最大的赋值;
}
arry[j + 1] = temp;//将从无序区选出的最大值在有序区排序。
}
}
}</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace Test1
{
class Program
{
static void Main(string[] args)
{
//插入排序
int[] arry = new int[] { 11, 21, 13, 15, 54, 59, 57, 65 };
arry.InsertSort();
for (int i = 0; i < arry.Length; i++)
{
Console.Write("\t" + arry[i]);
}
Console.Read();
}
}
}</span>
结果
冒泡(交换)和选择排序(C#版)
冒泡排序
<span style="font-family:KaiTi_GB2312;font-size:18px;"> /// <summary>
/// 冒泡(交换)排序
/// </summary>
/// <param name="arry">要排序的整数数组</param>
public static void Sort(this int[] arry)
{
for (int i = 0; i < arry.Length; i++)
{
for (int j = 0; j < arry.Length - 1 - i; j++)
{
//比较前面两个元素,如果前面的比后面的大,则交换位置;
//反之不用交换位置
if (arry [j ]>arry [j +1])
{
int temp =arry[j +1];//给一个临时变量来作为容器,达到两个数交换位置;
arry [j +1]=arry [j];
arry [j ]=temp ;
}
}
}
}</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace Test1
{
class Program
{
static void Main(string[] args)
{
//冒泡(交换)排序
int[] arry = new int[] { 6, 5, 2, 4, 9, 8, 3, 1 };
arry.Sort();
for (int i = 0; i < arry.Length; i++)
{
Console.Write("\t" + arry[i]);
}
Console.Read();
}
}
}</span>
结果
选择排序
<span style="font-family:KaiTi_GB2312;font-size:18px;"> /// <summary>
/// 选择排序
/// </summary>
/// <param name="arry">待排序的整数数组</param>
public static void SelectSort(this int[] arry)
{
int temp = 0;
for (int i = 0; i < arry.Length; i++)
{
for (int j = i + 1; j < arry.Length; j++)
{
if (arry[i ] > arry[j])
{
temp = arry[i];
arry[i] = arry[j ];
arry[j ] = temp;
}
}
}
}</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace Test1
{
class Program
{
static void Main(string[] args)
{
//选择排序
int[] arry = new int[] { 33, 45, 65, 15, 20, 74, 66, 88 };
arry.SelectSort();
for (int i = 0; i < arry.Length; i++)
{
Console.Write("\t" + arry[i]);
}
Console.Read();
}
}
}</span>
结果
每一个排序算法,都有其独特之处,现在我只是出于了解之处,希望在以后有机会多多实践。
小结
1、一张图胜过千言万语,米老师的思想真的很棒。
2、有些东西仅仅知道是不够的,还要学会使用。