收藏 分享(赏)

10种排序算法总结.txt

上传人:weiwoduzun 文档编号:3883854 上传时间:2018-11-25 格式:TXT 页数:11 大小:29.66KB
下载 相关 举报
10种排序算法总结.txt_第1页
第1页 / 共11页
10种排序算法总结.txt_第2页
第2页 / 共11页
10种排序算法总结.txt_第3页
第3页 / 共11页
10种排序算法总结.txt_第4页
第4页 / 共11页
10种排序算法总结.txt_第5页
第5页 / 共11页
点击查看更多>>
资源描述

1、10种排序算法总结2011-09-20 12:01:17 我来说两句 收藏 我要投稿排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准: (1)执行时间 (2)存储空间 (3)编程工作 对于数据量较小的情形,(1)(2)差别不大,主要考虑(3);而对于数据量大的,(1)为首要。 主要排序法有: 一、冒泡(Bubble)排序相邻交换 二、选择排序每次最小/大排在相应的位置 三、插入排序将下一个插入已排好的序列中 四、壳(Shell)排序缩小增量 五、归并排序 六、快速排序 七、堆排序 八、拓扑排序 九、锦标赛排序 十、基数排序 一、冒泡(Bu

2、bble)排序 -Code 小 大排序n个数- void BubbleSortArray() for(int i=1;iaj+1)/ 较交换相邻 int temp; temp=aj; aj=aj+1; aj+1=temp; -Code- O(n),适用于排序小列 。 二、选择排序 -Code 小 大排序n个数- void SelectSortArray() int min_index; for(int i=0;i=0 j-; arrj+1=temp; -Code- 最 O(n);最 O(n) 冒泡、选择相,适用于排序小列 列 基有序,插入排序 冒泡、选择有 。 四、壳(Shell)排序缩小增量

3、排序 -Code 小 大排序n个数- void ShellSortArray() for(int incr=3;incr=0 j-=incr; arrj+incr=temp; -Code- 适用于排序小列 。 O(nlog2n)O(n1.5),fifl于增量 的最 大小。建议使用数作为增量 , 为增量 2的 ,在下一个中次 较相的 。 壳(Shell)排序”了插入排序,了 较的次数。不定的排序, 为排序 程中 可 。 五、归并排序 -Code 小 大排序- void MergeSort(int low,int high) if(low=high) return;/每个列 中下一个 时 else

4、 int mid=(low+high)/2;/*将列 “相的两个列 ,有 数个 ,在列 大于 列 */ MergeSort(low,mid);/列 一 MergeSort(mid+1,high); int B=new int high-low+1;/建一个数 ,用于存归并的 for(int i=low,j=mid+1,k=low;i= pivot) -high; /将 个 小的 交换 swap(arrlow, arrhigh); / 在 中 一个大于 的 while (low kj,令jj1,否j不变; (5) 较temp kj,kjtemp,令ki于kj,并令i=j,j=2i+1,并转(3)

5、,否转(6) (6)令ki于temp,结 。 -Code- void HeapSort(SeqIAst R) /对R1n行堆排序,不妨用R0做暂存单 int I; BuildHeap(R); /将R1-n建“ 堆for(i=n;i1;i-) /对当 无序区R1i行堆排序,共做n-1趟。 R0=R1; R1=Ri; Ri=R0; /将堆 堆中最一个 录交换 Heapify(R,1,i-1); /将R1i-1重调整为堆,仅有R1可违堆性 -Code- 堆排序的时间,主要由建立 堆 重建堆 两 的时间 销构“, 们 调用Heapify实现的。 堆排序的最坏时间杂度为O(nlgn)。堆排序的 性较接近

6、于最坏性。 由于建 堆所需的 较次数较多,所以堆排序不适宜于 录数较的文件。 堆排序就地排序,辅助空间为O(1), 不定的排序方法。 堆排序 接插入排序的区别: 接选择排序中,为了 R1n中选出最小的 录,必须行n-1次 较, 在R2n中选出最小的 录,又需要做n-2次 较。事实 ,面的n-2次 较中,有许多 较可在 面的n-1次 较中已经做 ,但由于 一趟排序时 保留 些 较结,所以一趟排序时又重执行了 些 较操作。 堆排序可 树形结构保存 较结,可 较次数。 八、拓扑排序 currency1 :学生选修课排课先顺序 拓扑排序:把有向图中各 按照 们相互 间的优先系排列“一个线性序列的 程。

7、 方法: 在有向图中选一个 有 驱的 且输出 图中删除该 所有以 为尾的弧 重 两, 至全 已输出(拓扑排序“功), 当图中不存在无 驱的 (图中有 路)为。 -Code- void TopologicalSort()/*输出拓扑排序函数。G无 路,输出G的 的一个拓扑序列并 OK,否 ERROR*/ int indegreeM; int i,k,j; char n; int count=0; Stack thestack; FindInDegree(G,indegree);/对各 求入度indegree0num InitStack(thestack);/ 化栈 for(i=0;i #incl

8、ude #include #include #define SIZE 100000 #define MAX 1000000 struct node long num;/ char str10; int lastwin;/最胜的对手 int killer;/被击败的对手 long times;/ 赛次数 dataSIZE; long CompareNum=0; long ExchangeNum=0; long Read(char name)/读fi文件a.txt中的数据,并存在数 data中;最 数据的个数 FILE *fp; long i=1; fp=fopen(name,“rw“); fsc

9、anf(fp,“%d%s“, while(!feof(fp) i+; fscanf(fp,“%d%s“, return (i-1); long Create(long num)/创建胜 树, 冠军(最小数)在数 data中的下标 int i,j1,j2,max,time=1; long min;/ 录当 冠军的下标 for(i=1;pow(2,i-1)num) datai.num=MAX; for(i=1;i list = new List();/存每次排序的 List listArr = new List10;/十个 char currnetChar;/存当 的 说个 123 中的2 str

10、ing currentItem;/存当 的 说个 123 for (int i = 0; i (); for (int i = 0; i () list.Add(number); listArrj.Clear();/空每个 arr = list.ToArray();/arr向重排列的 /Console.Write(“0 times:“,i); Print(arr);/输出一次排列的结 list.Clear();/空list /得 最大 的位数 private static int GetMaxLength(int arr) int iMaxNumber = Int32.MinValue; fo

11、reach (int i in arr)/ 得 最大 if (i iMaxNumber) iMaxNumber = i; return iMaxNumber.ToString().Length;/ 获得最大 的位数不有投fi了. /输出数 public static void Print(int arr) foreach (int i in arr) System.Console.Write(i.ToString()+t); System.Console.WriteLine(); /生数 。数的0 1000。”数iLength生多个数 public static int CreateRandomArray(int iLength) int arr = new intiLength; Random random = new Random(); for (int i = 0; i iLength; i+) arri = random.Next(0,1001); return arr; -Code - 基数排序法于定性的排序,其时间杂度为O (nlog(r)m),其中r为所fi的基数,而m为堆数,在些时,基数排序法的 于其 的 较性排序法。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 实用文档 > 工作总结

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报