关于几种排序算法的理解

来源:互联网 发布:sql默认值语句 编辑:程序博客网 时间:2024/04/28 22:57

        我们知道在算法中对于一组杂乱无章的数据(暂且定义为整数的数据),我们是十分希望把这些数据按照由小到大或者由大到小的数序排列出来,因此,在一些典型的算法书上对于排序的算法介绍的尤为仔细,那么在这里我只是简单的说一说就我个人理解的几种常见的排序的算法:

        首先,是非常常见的一种排序的算法,那就是冒泡排序算法,冒泡排序算法是介绍排序算法的入门算法,所谓冒泡就是使你要排列的数据像从水底冒到水面的气泡一样,若是从大到小的过程排序的话,就让小的像气泡一样到达队伍的末尾。冒泡排序是重复的走过要排序的序列,一次比较两个元素,若他们的排序不符合要求就把他们的顺序调换过来,接着   在进行下次的排序,依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序时间复杂度 O(n^2)

        接下来介绍选择排序的过程,这是在待排序的序列中选择出最大的(最小的)放到序列的最前端胡最后端的过程,也就是说从序列中选择出一个你要找的数,在把数放到你排序队伍的固定的位置上的过程,选择排序的交换操作介于0和(n−1)次之间。选择排序的比较操作为n(n−1)/2次之间。选择排序的赋值操作介于0和3(n−1)次之间。比较次数O(n^2),比较次数与关键字的初始状态无关,总的比较次数N=(n-1)+(n-2)+...+1=n*(n-1)/2。交换次数O(n),最好情况是,已经有序,交换0次;最坏情况是,逆序,交换n-1次。交换次数比冒泡排序少多了,由于交换所需CPU时间比比较所需的CPU时间多,n值较小时,选择排序比冒泡排序快时间复杂度 O(n^2)

        第三我们介绍插入排序,插入排序顾名思义就是在一组已经排好序列的数据中插入一个新的数据,但要保证新插入的数据的序列仍然是有序的序列。插入排序是排序十分快的一种排序的方法。时间复杂度 O(n^2)

       第四种介绍的就是快速排序了,目前已知的最快的排序算法就是快速排序了,其基本的思想就是在一组数据中我们任取一个数据,排序的过程中我们要始终的做到的就是在确定这个元素的位置的时候我们要保证这个元素的左边的元素的值要小于这个元素的值,这个元素右边的值大于这个元素的值,那么这个元素的位置就确定了,接下来排另外的元素,循环的把所以的元素都排完,快速排序的过程就结束了。快速排序的时间复杂度为最理想 O(nlogn) 最差时间O(n^2)。


0 0
原创粉丝点击