简介
冒泡排序、简单选择排序、直接插入排序,这三种可以算的上是算法当中最简单的几种了,此篇文章就是简单介绍了这几种排序的实现、对比与分析。
算法
算法是什么,算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。
但是,要注意的一点是,我们学的叫做算法,排序也是一种算法,或者说我们学的叫做排序算法更为贴切,不要把排序与算法的范围所弄混便可。
冒泡排序
public static int[] Sort(int[] nums)
{
int temp; //定义临时变量
// 外层循环用来计算数字个数
for (int i = 0; i < nums.Length; i++)
{
// 内层循环用来冒出每一趟最大/小的数字
for (int j = 0; j < nums.Length - i - 1; j++)
{
// 相邻两个数字进行比较,如果位置颠倒那么交换位置
if (nums[j] > nums[j + 1])
{
temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
}
// 打印数组
Console.Write("i=" + i + ", " + "j=" + j + " : ");
foreach (int num in nums)
{
Console.Write(num + " ");
}
Console.WriteLine();
}
Console.WriteLine();
}
return nums;
}
冒泡排序的中心思想:
我们可以从字面意思来理解,冒泡排序,就是冒泡,每一次将最大的数字冒到最上面,依次循环,便可以得到有序序列。
简单选择排序
public static int[] Sort(int[] nums)
{
for (int i = 0; i < nums.Length; i++) // 外循环用来排每一个数
{
int min = i; // 定义最小值的index为i
for (int j = i + 1; j < nums.Length; j++) // 内循环用来找到无序的最小值的index
{
if (nums[j] < nums[min]) // 如果某个值比index为min的值小,则把它重新赋给min
{
min = j;
}
}
// 将无序的最小值的index与无序的第一个值的index进行交换
int temp = nums[min];
nums[min] = nums[i];
nums[i] = temp;
}
return nums;
}
简单选择的中心思想:
同样从字面意思来进行理解,把序列分为有序和无序,从无序序列中选择出最小的数字,然后与无序序列的第一个值进行交换,那么有序序列便多了一个值,无序序列便少了一个值,依次循环,便可得到有序序列。
直接插入
public static int[] Sort(int[] nums)
{
for (int i = 1; i < nums.Length; i++) // 外循环,用于排序每一个数字
{
int index = 0; // 要插入的索引值
int temp = nums[i]; // 岗哨
for (int j = i - 1; j >= 0; j--) // 内循环,用于将无序第一个插入到有序序列当中
{
if (nums[j] > temp) // 判断有序数组是否向后移动
{
nums[j + 1] = nums[j];
index = j;
};
}
nums[index] = temp; // 将岗哨的值插入到要插入的位置处
}
// 打印数组
foreach (int num in nums)
{
Console.Write(num + " ");
}
Console.ReadKey();
return nums;
}
直接插入排序的中心思想:
同样,从字面来理解它的意思,以第一个数字为基准,将数组分为有序(第一个)和无序(第一个之外所有的),然后拿出无序第一个进行记录,将其插入到有序当中,依次循环,便可的到有序序列。
思维导图:
总结
三种排序算法的中心思想都不相同,但是他们的性能相差不大,所以,要看合适的场景来进行选择所需要的排序方式来实现所需要的功能。
持续完善ing…