C#实现冒泡排序算法的代码示例
1、原理:从数组的第一个位置开始两两比较array[index]和array[index+1],如果array[index]大于array[index+1]则交换array[index]和array[index+1]的位置,止到数组结束;
从数组的第一个位置开始,重复上面的动作,止到数组长度减一个位置结束;
从数组的第一个位置开始,重复上面的动作,止到数组长度减二个位置结束;
。。。。
2、时间复杂度:O(N²),进行了(n-1)*(n-2)....=n*(n-1)/2次比较和约比较次数一半的交换次数(均况下),那么根据大O表示法时间复杂度为O(N^2)
3、代码示例:
using System; namespace MySort { //先建立一个类,以后把所有排序方法都放到这个类里, public class SumSort { //冒泡排序方法,从小到大排,虽然很多冒泡排序都是从大到小, //可是我就想这么排,你能怎么着我。 public void PopSort(int[] list) { int i, j, temp; //先定义一下要用的变量 for (i = 0; i < list.Length - 1; i++) { for (j = i + 1; j < list.Length; j++) { if (list[i] > list[j]) //如果第二个小于第一个数 { //交换两个数的位置,在这里你也可以单独写一个交换方法,在此调用就行了 temp = list[i]; //把大的数放在一个临时存储位置 list[i] = list[j]; //然后把小的数赋给前一个,保证每趟排序前面的最小 list[j] = temp; //然后把临时位置的那个大数赋给后一个 } } } } } public class test { //这里给一组测试数据,打印输出看看排序方法的效果如何 static void Main() { int[] arr = { 1, 4, 2, 43, 5, 61, 89, 34, 67, 32, 40 }; //把数据排序类实例化一下,然后调用方法。 //什么?还要实例,可我不想实例化怎么办? //那也没有关系,把PopSort方法前加一个static,直接调用SumSort.PopSort(arr)就好了 SumSort mysort = new SumSort(); //来来来,大家按高矮排个队,矮的排前面高的排后面 mysort.PopSort(arr); //真听话,看看大家都排第几位了 for (int i = 0; i < arr.Length; i++) { Console.Write("第{0}位是{1}\n", i + 1, arr[i]); } Console.WriteLine(); } } }
相关推荐
-
C#堆排序实现方法
本文实例讲述了C#堆排序实现方法.分享给大家供大家参考.具体如下: private static void Adjust (int[] list, int i, int m) { int Temp = list[i]; int j = i * 2 + 1; while (j <= m) { //more children if(j < m) if(list[j] < list[j + 1]) j = j + 1; //compare roots and the older childre
-
C#递归算法之快速排序
上两片第归算法学习: 1)递归算法之分而治之策略 2)递归算法之归并排序 上一篇学习中介绍了了递归算法在排序中的一个应用:归并排序,在排序算法中还有一种算法用到了递归,那就是快速排序,快速排序也是一种利用了分而治之策略的算法,它由C.A.R发明,它依据中心元素的值,利用一系列递归调用将数据表划分成越来越小的子表.在每一步调用中,经过多次的交换,最终为中心元素找到最终的位置.与归并算法不同,快速排序是就地排序,而归并排序需要把元素在临时向量中拷贝,下面通过对以下向量进行排序来理解和加深快速排序算法
-
C#递归算法之归并排序
归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为: 1)划分子表 2)合并半子表 首先我们来讨论归并算法,归并算法将一系列数据放到一个向量中,索引范围为[first,last],这个序列由两个排好序的子表构成,以索引终点(mid)为分界线,以下面一个序列为例 7,10,19,25,12,17,21,30,48 这样的一个序列中,分为两个子序列 7,10,19,25 和
-
C#中哈希表(HashTable)用法实例详解(添加/移除/判断/遍历/排序等)
本文实例讲述了C#中哈希表(HashTable)用法.分享给大家供大家参考,具体如下: 1. 哈希表(HashTable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中key通常可用来快速查找,同时key是区分大小写:value用于存储对应于key的值.Hashtable中keyvalue键值对均为object类型,所以Hashtable可以支持任何类型的keyvalue键
-
关于C#中排序函数的总结
sort 函数对数组中的数据进行升序排序,(其中,sort函数有很多重载的形式,这里不再一一的说明) Reverse函数对数组中的数据进行降序排序, static void Main(string[] args) { // sort ,Reverse 排序的应用举例 int[] intArr = { 1,4,2,3,99,34,22,16,8,100}; Console.WriteLine("原数组为:"); for (int i = 0; i < intArr.Length;
-
C#插入法排序算法实例分析
本文实例讲述了C#插入法排序算法.分享给大家供大家参考.具体如下: public static void InsertSort (int[] list) { for (int i = 1; i < list.Length; i++) { int Temp = list [i]; int j = i - 1; while (j > = 0 && list [j] > Temp) { list [j + 1] = list [j]; j-; } list [j + 1] =
-
C#选择法排序实例分析
本文实例讲述了C#选择法排序实现方法.分享给大家供大家参考.具体实现方法如下: public int[] SelectionSort(int[] arr) { //1. Find min //2. Swap it with first element //3. Repeat starting from secong position onwards. int _min = 0; for (int i = 0; i < arr.Length; i++) { _min = i; for (int j
-
逐步讲解快速排序算法及C#版的实现示例
算法思想 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod). 该方法的基本思想是: 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. 3.再对左右区间重复第二步,直到各区间只有一个数. 虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤.因此我的对快速排序作了进一步的说明:挖坑填数+分治法:
-
C#中使用基数排序算法对字符串进行排序的示例
开始之前 假设最长字符串的长度是L,以L作为输入的长度, 然后假定所有的字符串都"补齐"到此长度,这个补齐只是逻辑上的,我们可以假想有一种"空字符", 它小于任何其它字符,用此字符补齐所有长度不足的字符串.例如:最长的字符串长度为9,有一个字符串A长度为6, 那么当比较第7位字符的时候,我们让A[7]为"空字符". 如果要包含所有的字符似乎并不容易,我们先定义一个字符集, 待排序字符串中的所有字符都包含在这个字符集里 //字符集 private
-
C#实现冒泡排序算法的代码示例
1.原理:从数组的第一个位置开始两两比较array[index]和array[index+1],如果array[index]大于array[index+1]则交换array[index]和array[index+1]的位置,止到数组结束; 从数组的第一个位置开始,重复上面的动作,止到数组长度减一个位置结束; 从数组的第一个位置开始,重复上面的动作,止到数组长度减二个位置结束; .... 2.时间复杂度:O(N²),进行了(n-1)*(n-2)....=n*(n-1)/2次比较和约比较次数一半的交
-
Java实现冒泡排序与双向冒泡排序算法的代码示例
冒泡排序: 就是按索引逐次比较相邻的两个元素,如果大于/小于(取决于需要升序排还是降序排),则置换,否则不做改变 这样一轮下来,比较了n-1次,n等于元素的个数:n-2, n-3 ... 一直到最后一轮,比较了1次 所以比较次数为递减:从n-1 到 1 那么总的比较次数为:1+2+3+...+(n-1), 以等差公式计算:(1+n-1)/2*(n-1) ==> n/2*(n-1) ==> (n^2-n) * 0.5 用大O表示算法的时间复杂度:O(n^2) , 忽略了系数0.5和常数-n
-
Python编程二分法实现冒泡算法+快速排序代码示例
本文分享的实例主要是Python编程二分法实现冒泡算法+快速排序,具体如下. 冒泡算法: #-*- coding: UTF-8 -*- #冒泡排序 def func(lt): if type(lt).__name__ !='list' and type(lt).__name__ !='tuple': return if type(lt).__name__ == 'tuple': return list(lt) for i in range(1,len(lt)-1): for j in range
-
python实现协同过滤推荐算法完整代码示例
测试数据 http://grouplens.org/datasets/movielens/ 协同过滤推荐算法主要分为: 1.基于用户.根据相邻用户,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表进行推荐 2.基于物品.如喜欢物品A的用户都喜欢物品C,那么可以知道物品A与物品C的相似度很高,而用户C喜欢物品A,那么可以推断出用户C也可能喜欢物品C. 不同的数据.不同的程序猿写出的协同过滤推荐算法不同,但其核心是一致的: 1.收集用户的偏好 1)不同行为分组 2)不同分组进行加权计算用
-
Python实现各种排序算法的代码示例总结
在Python实践中,我们往往遇到排序问题,比如在对搜索结果打分的排序(没有排序就没有Google等搜索引擎的存在),当然,这样的例子数不胜数.<数据结构>也会花大量篇幅讲解排序.之前一段时间,由于需要,我复习了一下排序算法,并用Python实现了各种排序算法,放在这里作为参考. 最简单的排序有三种:插入排序,选择排序和冒泡排序.这三种排序比较简单,它们的平均时间复杂度均为O(n^2),在这里对原理就不加赘述了.贴出来源代码. 插入排序: def insertion_sort(sort_lis
-
利用python实现冒泡排序算法实例代码
冒泡排序 冒泡排序(英语:Bubble Sort)是一种简单的排序算法.它重复地遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 冒泡排序算法的运作如下: 1.比较相邻的元素.如果第一个比第二个大(升序),就交换他们两个. 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对.这步做完后,最后的元素会是最大的数.
-
Objective-C实现冒泡排序算法的简单示例
简介 冒泡算法是一种基础的排序算法,这种算法会重复的比较数组中相邻的两个元素.如果一个元素比另一个元素大(小),那么就交换这两个元素的位置.重复这一比较直至最后一个元素.这一比较会重复n-1趟,每一趟比较n-j次,j是已经排序好的元素个数.每一趟比较都能找出未排序元素中最大或者最小的那个数字.这就如同水泡从水底逐个飘到水面一样.冒泡排序是一种时间复杂度较高,效率较低的排序方法.其空间复杂度是O(n). 1, 最差时间复杂度 O(n^2) 2, 平均时间复杂度 O(n^2) 实现思路 1,每一趟比
-
Swift实现堆排序算法的代码示例
算法思想 堆排序利用了最大堆(或小根堆)堆顶记录的关键字最大(或最小)这一特征,使得在当前无序区中选取最大(或最小)关键字的记录变得简单. 1.用最大堆排序的基本思想 (1)先将初始文件R[1..n]建成一个最大堆,此堆为初始的无序区 (2)再将关键字最大的记录R[1](即堆顶)和无序区的最后一个记录R[n]交换,由此得到新的无序区R[1..n-1]和有序区R[n],且满足R[1..n-1].keys≤R[n].key (3)由于交换后新的根R[1]可能违反堆性质,故应将当前无序区R[1..n-
-
Swift实现快速排序算法的代码示例
思想 快速排序作为分治代表,通常实现由三步 1.数据中选择一个元素作为"基准"(pivot),通常选取最后一个元素: 2.分区(partition) 所有小于"基准"的元素,都移到"基准"的左边:所有大于"基准"的元素,都移到"基准"的右边.分区操作结束后,基准元素所处的位置就是最终排序后它的位置. 3.对"基准"左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为
-
java实现的各种排序算法代码示例
折半插入排序 折半插入排序是对直接插入排序的简单改进.此处介绍的折半插入,其实就是通过不断地折半来快速确定第i个元素的 插入位置,这实际上是一种查找算法:折半查找.Java的Arrays类里的binarySearch()方法,就是折半查找的实现,用 于从指定数组中查找指定元素,前提是该数组已经处于有序状态.与直接插入排序的效果相同,只是更快了一些,因 为折半插入排序可以更快地确定第i个元素的插入位置 代码: package interview; /** * @author Administrat
随机推荐
- 正则表达式限制 账号 密码 邮箱 身份证 手机号的相关代码
- jQuery的一些注意
- java旋转二维数组实例
- ASP.NET MVC5网站开发咨询管理的架构(十一)
- Android 进度条显示在标题栏的实现方法
- javascript利用apply和arguments复用方法
- JS获取字符串型数组下标的数组长度的代码
- JS+CSS实现的经典圆角下拉菜单效果代码
- python中sys.argv参数用法实例分析
- Mysql错误Cannot find or open table x/x from the internal问题解决方法
- 让NumLock指示灯常亮起来
- McAfee 1920错误 启动失败的解决办法
- Javascript6中字符串的四个新用法分享
- vbs实现myipneighbors 域名查询结果整理
- apache rewrite防盗链三例
- Android ListView滑动删除操作(SwipeListView)
- Java date format时间格式化操作示例
- php中通过DirectoryIterator删除整个目录的方法
- jquery处理页面弹出层查询数据等待操作实例
- 详解SpringBoot通过restTemplate实现消费服务