找网络公司做网站流程,桂林北站地图,电商设计的工作内容,做设计必知网站前言
其实到上一节结构体我们就已经将c#的基础知识点大概讲完#xff0c;接下来我们会讲解一些关于算法相关的东西。
我们一样来问一下gpt吧#xff1a;
Q:解释算法
A:
算法是一组有序的逻辑步骤#xff0c;用于解决特定问题或执行特定任务。它可以是一个计算过程、一个…前言
其实到上一节结构体我们就已经将c#的基础知识点大概讲完接下来我们会讲解一些关于算法相关的东西。
我们一样来问一下gpt吧
Q:解释算法
A:
算法是一组有序的逻辑步骤用于解决特定问题或执行特定任务。它可以是一个计算过程、一个计算机程序或一套规则。
算法具有以下特征
输入算法具有零个或多个输入变量这些变量是算法运行时需要提供的数据。输出算法产生一个或多个输出结果这些结果是通过对输入数据进行计算和处理得到的。有穷性算法必须在有限的步骤内停止不会无限循环或进入死循环。确定性算法中的每个步骤必须明确定义不会产生二义性或歧义。可行性算法必须可以实际执行能够在有限的时间内得到结果。通用性算法可以用来解决一类问题而不仅仅是特定的实例。
在计算机科学中算法通常描述为一系列的操作、条件语句、循环结构和函数调用用来指示计算机在进行数据处理时应遵循的步骤和规则。算法可以用伪代码、流程图、程序代码或其他可读性强的形式来描述。
算法的设计和分析是计算机科学中的重要研究领域。一个好的算法可以显著提高计算效率和资源利用率而糟糕的算法则可能导致低效或不可接受的性能。因此研究者和开发者在编写程序时应该选择和优化适当的算法来解决问题。
这样看上去难免还是觉得很复杂那我们再百度一下
算法Algorithm是指解题方案的准确而完整的描述是一系列解决问题的清晰指令算法代表着用系统的方法描述解决问题的策略机制。 也就是说能够对一定规范的输入在有限时间内获得所要求的输出。
还是麻烦了那博主再给你精简一点
算法就是解决一些问题的计算方法。
这个想毕你就很快就能理解了哦其实就是一个方程式嘛我带入一个值它给我一个值。
对的算法也是这样当然他可能输入很多个值出来很多个值但这些都不重要你只要知道它是用来解决实际问题的方法算法高不高级就看你解决问题所需要的时间少不少。
那其实算法也并不难嘛。
当然入门肯定不难。
而今天我们就来讲解第一个入门的算法冒泡排序。
排序
排序是计算机内经常进行的一种操作其目的是讲一组没有顺序的记录按一定顺序排好。
程序中经常对数组排序
冒泡排序的基本原理 看到这个图不知道你是否有一些想法
通过重复比较相邻两个元素的大小并根据比较结果交换位置将最大或最小的元素逐步“冒泡”到数列的末尾或开头。
对就像鱼儿吐泡泡一样这样我们就只需要反复比较n-1次这样才能保证完全排完就能得到最终的排列结果。
代码实现
我们先来实现从头开始第一个数的比较。
首先我们来分析一下思路我们先声明一个数组过后我们就要开始遍历了既然我们是和数组下一个元素比较那么我们就要考虑到什么时候停止。
当然是元素如果排到最后一个就可以停止了。
那假设我们的元素会排到数组的的末尾那他还会比较吗显然是不用的所以我们遍历的时候也只用遍历到倒数第二个元素就可以了因为在倒数第二个元素的比较就是我们最后的比较。
以下是我们实现一个数的比较的代码。
using System;
using System.Runtime.Serialization.Formatters;class Program
{static void Main(string[] args){int[] arr new int[] { 8, 7, 1, 5, 4, 2, 6, 3, 9 };for (int i 0; i arr.Length-1; i){if (arr[i] arr[i1]) //大于升序小于降序{int temp arr[i];//声明一个临时变量存储值避免值消失arr[i] arr[i1];arr[i1] temp;}}for (int i 0;i arr.Length;i){Console.WriteLine(arr[i]);}}
}
然后我们就要进行多轮比较吧那我们假设不知道里面有个数那我们又假设最坏的情况就是我们必须遍历到最后一个数才能将数组完全排序完毕那简单了
我们有多少个数就排多少次这样一定能排完所以我们在外层加一个for循环。
using System;
using System.Runtime.Serialization.Formatters;class Program
{static void Main(string[] args){int[] arr new int[] { 8, 7, 1, 5, 4, 2, 6, 3, 9 };for (int j 0; j arr.Length; j){for (int i 0; i arr.Length - 1; i){if (arr[i] arr[i 1]) //大于升序小于降序{int temp arr[i];//声明一个临时变量存储值避免值消失arr[i] arr[i 1];arr[i 1] temp;}}}for (int i 0;i arr.Length;i){Console.WriteLine(arr[i]);}}
}
以上就是最基本的冒泡排序的c#实现我们运行程序就能看到他能将我们想要的数组给排列好。
优化
我想你已经掌握了冒泡排序的基本思路但我还想提出几点可以优化的地方但这个相对来说比较难理解。为了方便你观察流程博主接下来的代码将每一次遍历的结果都打印了出来。
首先我们在一次比较中并不是一定要遍历完所有数的在前面比较中就确定了位置的数其实就没必要继续比较了特殊情况的优化排序在前面几个数的时候就完成了排序就不用继续排序了。
废话少说上代码详情请看注释不懂可以私信博主。
你可以尝试把优化点去掉然后去感受一下原本的比较和现在的比较的差别。
当然你可能会从时间复杂度O(n2)上挑刺上说这种优化没有必要因为时间复杂度没有变但你要明白性能优化永远是程序员最大的敌人。你学习的更多是这种思路
有没有多余的计算进行能否简洁运算能否更快地得出答案
而不是死啃书本你书本上的东西都要落实到实际。
using System;
using System.Runtime.Serialization.Formatters;class Program
{static void Main(string[] args){int[] arr new int[] { 8, 7, 1, 5, 4, 2, 6, 3, 9 };bool isMPSortfalse;for (int j 0; j arr.Length; j){isMPSort false;for (int i 0; i arr.Length - 1-j; i)//第一个优化点{if (arr[i] arr[i 1]) //大于升序小于降序{isMPSort true;//第二个优化点int temp arr[i];//声明一个临时变量存储值避免值消失arr[i] arr[i 1];arr[i 1] temp;}}if (!isMPSort)//如果没有进行排序其实是数组排序已经完成{break;}for (int i 0; i arr.Length; i){Console.Write( arr[i]);}Console.WriteLine();}for (int i 0;i arr.Length;i){Console.Write( arr[i]);}}
} 总结
我们今天对第一个算法冒泡排序进行了学习如果你是初次接触编程的人那可能是有一定的难度但我希望你切切实实去敲敲代码去一步一步调试然后去感受这种算法背后的思想。
冒泡排序是你学习的第一个算法但绝对不是最后一个。
想要成为一个强大的程序猿还任重道远呢。
还是那句话戒骄戒躁脚踏实地
请期待我的下一篇博客。