当前位置: 首页 > 科技观察

C语言非数值计算常见的五种经典排序算法

时间:2023-03-13 18:54:01 科技观察

摘要:排序是一种计算机运算方法,其目的是将一组“无序”的记录序列调整为“有序”的记录序列,主要分为内排序和外部排序。排序排序是计算机的一种操作方法,其目的是将一组“无序”的记录序列调整为“有序”的记录序列,主要分为内部排序和外部排序。(1)冒泡排序(bubblesorting)冒泡排序(BubbleSort),基本思想是对于一组待排序的元素列,依次比较相邻的两个数,较小的数放在前面,较大的数为放在后面,以此类推,直到比较完最后两个数,小数放在前面,大数放在后面,重复上述步骤,直到全部排序完成。优点:稳定;缺点:慢,每次只能移动两个相邻的数据。假设一个包含n个数的数列要按升序排序,冒泡排序算法的步骤是:①从存储数列的数组中的第一个元素到最后一个元素,依次比较相邻的两个数,如果前者较大,如果后者较小,则交换两个数的位置;②经过①遍后,最大数存入数组的最后一个元素,然后从第一个元素到倒数第二个元素,相邻的两个如果前者大,后者小,则交换位置两个数字;③重复步骤①n-1次,每次比上一次少比较一次,即可完成想要的结果。1、随机读入10个整数,用冒泡法升序排列,输出。2.传统方法:(2)选择法排序选择法排序是在每次行程中的n-i+1(i=1,2,...n-1)条记录中选择关键字最小的记录作为一条记录有序序列第i条记录。基于这种思想的算法主要有简单选择排序、树选择排序和堆排序。优点:移动数据的次数已知(n-1次);缺点:比较次数多,不稳定。选择排序是一种比较容易理解的排序算法。假设一个包含n个数的序列要按升序排序,算法步骤为:①从数组中存储的n个数中找出最小数的下标(算法见下文“求最大值”),然后将最小的数与第一个数的位置交换;②除第一个数外,从剩下的n-1个数中找出最小数(即n个数中小数点后第二位)的下标,并将这个数与第二个数交换位置;③重复步骤①n-1次,完成请求。1、任意读入10个整数,按选择法升序排列,输出。2、传统方法:函数法:(3)插入排序优点:稳定、快速;缺点:比较次数不一定,比较次数越多,插入点后移动的数据就越多,尤其是数据总量巨大的时候,不过这个问题可以用链表解决。如果你想很好地掌握这个算法,请理解“有序序列插入算法”,即在一个有序序列中插入一些数据后,该序列仍然是有序的。有关插入算法,请参见下面的“数组元素的插入”。1、将任意读入的整数x插入一个升序序列后,该序列仍然是升序排列。插入排序的要领是每次读取时立即向最终存储的数组中插入一个数,每次插入都使数组有序。2、任意读入10个整数,通过插值降序排列,输出。(4)归并排序归并排序(MERGE-SORT)是一种基于归并操作的有效排序算法。这个算法是分治法(DivideandConquer)的一个非常典型的应用。将有序的子序列组合起来,得到一个完全有序的序列;即先把每个子序列排好序,再把子序列段排好序。如果将两个排序后的表合并为一个排序后的表,则称为双向合并,即将两个均按升序(或降序)顺序排列的数据序列合并为一个仍按原顺序排列的序列。1、有一个包含6个数据的升序序列和一个包含4个数据的升序序列,将两者合并为一个包含10个数据的升序序列。(5)字符数组:(倒序排列)例如:1、将输入的字符串倒序排列,如输入ABCDE,输出为EDCBA