码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法(冒泡,选择,插入,快速,希尔,堆排序,基数,计数排序 )

时间:2015-12-28 20:17:15      阅读:213      评论:0      收藏:0      [点我收藏+]

标签:

时间复杂度为O(n^2)的排序算法:冒泡排序,选择排序,插入排序

数组a[N]中进行冒泡排序 

 

冒泡排序:

  假如数组为[3,7,4,6,8,9,1]-->[3,7,4,6,8,9,1]-->[3,4,7,6,8,9,1]....一直进行下去,相邻2个数进行比较。

  1.第一轮:数组相邻2个元素相比较(a[0]和a[1]比,a[1]和a[2]比,a[2]和a[3]比,a[3]和a[4]比...),较大数往后放,一直相邻比较到数组最后一个数。

    第二轮继续数组相邻比较,此时一直相邻比较到数组倒数第二个元素。

        ...一直到最后一轮只用比较a[0]和a[1]比时,结束。

  在整个数组中进行,a[0]与a[1]比较,较大的数放在a[1],然后a[1]和a[2]进行比较,相等或者较大数放a[2],以此类推一直比较到数组的最后一位,比较完成后此时的数组的最后一个元素就为整个数组的最大数。确定了一个最大数后,在进行冒泡,不过此时进行的范围就是整个数组长度-1的范围内,因为第一轮后我们已经确定了最后一位是最大的,接着进行的是整个数组中第二大的数,它将被放在整个数组的倒数第二位中。依次进行下去,冒泡的范围在数组的第一位时,此时这个数组完成排序。

 

 

选择排序:

  假如数组为[3,7,4,6,8,9,1] --->[1,7,4,6,8,9,3]-->[1,3,4,6,8,9,7]--->.....

  找出数组中最小的数,放在第一位上。接下来找数组中除了第一位中最小的数,放在第二位上。以此类推

  1.取出数组中第一个数放入临时变量tmp中,然后遍历数组,遇到比tmp值还小的数,则这个数赋值给tmp,temp中的数为数组最小。并将最小数所在的位置和数组第一的位置的值互换。

  2.取出中第二个数做第一步相同处理。则整个数组中第二小的数放在数组第二位。

     3.以此类推

 

插入排序:

  假如数组为[3,7,4,6,8,9,1]-->[3,7,4,6,8,9,1]-->[3,4,7,6,8,9,1]-->[3,4,6,7,8,9,1]....

  1.从数组中第二个数(下标为1)开始,向前比较(因为第一个数前面没有别的数了,且下标为0),若比第一个数小,则与第一个数交换位置。

  2.从数组中第三个数开始,向前比较,若比第二个数大,则不需要移动位置因为第二个数肯定比第一个数大,若比第二个数小,则还需要比较第一个数,若比第一个数还小则需要和第一个数比较,若比第一个数大,则只需要和第二个数交换位置。

  3.从数组中第n个数比较,若比第n-1大,则继续比较第n-2个。。在代码实现中就是若比前面那个数小则与它互换位置,继续向前比较。直到和第一个数比较。

 

还有3个算法:快速排序,堆排序,希尔排序。改日更新

还有2个算法:基数排序和计数排序

 

  

 

排序算法(冒泡,选择,插入,快速,希尔,堆排序,基数,计数排序 )

标签:

原文地址:http://www.cnblogs.com/hams/p/5083584.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!