一、change your mind
其实算法很难,但是我们可以从最简单的开始学啊~~,学着学着就简单了。
二、这就是算法~
(一)从最简单的开始吧(都是从小到大排的)
(1)选择
static void Main(string[] args)
{
int[] nums = new int[] { 5, 2, 1, 4, 3 };
int temp = 0;
int minIndex = 0;
for (int j = 0; j < nums.Length ; j++)
{
minIndex = j;
for (int i = j; i < nums.Length ; i++)
{
if (nums[i] > nums[minIndex])
{
minIndex = i;
}
}
temp = nums[minIndex];
nums[minIndex] = nums[j];
nums[j] = temp;
Console.WriteLine(nums[j] + "\t");
}
Console.ReadKey();
}
(2)冒泡
static void Main(string[] args)
{
int[] nums = new int[] {5,2,1,4,3};
int temp = 0;
for (int j = 0; j < nums.Length-1; j++)
{
for (int i = 0; i < nums.Length - 1 - j; i++)
{
if (nums[i]< nums[i + 1])
{
temp = nums[i];
nums[i] = nums[i + 1];
nums[i + 1] = temp;
}
}
}
for (int i = 0; i < nums.Length; i++)
{
Console.WriteLine(nums[i] + "\t");
}
Console.ReadKey();
}
(3)插入
for (int i = 1; i < nums.Length; i++)
{
int temp= nums[i]; //首先记住这个预备要插入的数
int j = i - 1; //找出它前一个数的下标
//如果这个条件满足,说明,我们还没有找到适当的位置
while (j <= 0 && temp < nums[j]) //这里小于是升序,大于是降序
{
nums[j + 1] = nums[j]; //同时把比插入数要大的数往后移
j--;
}
//插入
nums[j + 1] = temp;
选择排序与交换排序是不一样的
选择排序:假设一个是最大的,其他所有元素一次与之相比较,最后选出最大的放在变量中保存起来。
交换排序:相邻两个之间相比较,并交换,将最大的冒出来。
(二)加深一点难度
(1)快速排序
键值,轴值
(2)希尔排序
按照固定间隔进行划分并不断
(3)堆排序
找出中间值,上下进行比较
(三)算法设计
(1)时间复杂度
时间复杂度是指,输入规模n与总运行时间之间的关系。
(2)分治
1.递归
2.分治
(3)动态规划
1.最后子结构
2.重叠子问题
小结:时隔这么多天,再次编辑,发现没有办法写下去了,所以就写了一篇新的。让算法变得简单,加油。