选择排序、快速排序、冒泡排序、插入排序

来源:互联网 发布:linux如何修改用户组 编辑:程序博客网 时间:2024/06/10 08:01

1.选择排序:

在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换第二趟遍历剩下的N-1个数据,找出其中最小的元素与第一个交换,第N-1趟遍历剩下的2个数据,找出其中最小的值与第N-1个元素交换,直到完成排序。

例如: 11  32  22  13  9

第一趟排序后: 9  32  22  13  11

第二趟排序后: 9  11  22  13  32

第三次排序后: 9  11  13  22  32  排序完成。

平均时间复杂度:On^2

空间复杂度:O(1)

稳定性:不稳定

2.快速排序

思想:a在带排序的元素中任取一个元素作为基准(通常选第一个),称为基准元素;

      b将带排序的元素进行分区,比基准元素大的元素放在他的右边,比他小的放在左边;

      c对左右两个分区重复以上步骤直达所有元素有序;

时间复杂的:Onlogn

例如:5  2  6  8  4为带排序元素

首先选取5为基准元素 5 4比较5>4交互4  2  6  8  5

                     5 2比较2<5不交换4  2  6  8  5

                     58比较8>5交换4  2  6  5  8

                     56比较5<6交互4  2  5  6  8

基准元素分别与最后一个比较,然后与第二个元素比较,然后与倒数第二个比较,然后与第三个比较。。。。大的放右边,小的放左边。

3.冒泡排序

思想:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第一个和第二个数,将小数放前,大数放后,然后比较第二个数和第三个数将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较 (因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个 数),将小数放前中,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟 结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

时间复杂度:On^2

例如:6  3  1  8  4

3  1  6  4  8(最后一个位置为最大数字)

1  3  4  6  8(倒数第二位为倒数第二大)

4.插入排序

思想:检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。

例如:5  8  4  1  6

从第二个数开始:8大于5不用交换,第三个数比第二个数小,交换得到5  4  8  1  6第二个比第一个小,交换,4  5  8  1  6,同理,第四个数与前面的数比较1  4  5  8  6,第五个数与前面的比较1  4  5  6  8完成。

时间复杂度:On^2

阅读全文
0 0