2013年7月3日

快速排序

摘要: 快速排序:快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。步骤为:从数列中挑出一个元素,称为 "基准"(pivot),重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出 阅读全文

posted @ 2013-07-03 22:36 XCoderLiu 阅读(264) 评论(0) 推荐(0)

选择排序

摘要: 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。选择排序的主要优点与数据移动有关。如果某个元素位于正确的最终位置上,则它不会被移动。选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素的表进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素的排序方法中,选择排序属于非常好的一种。值得注意的是:选择排序和冒泡排序的区别:冒泡排序,在每一次比较的时候, 阅读全文

posted @ 2013-07-03 22:11 XCoderLiu 阅读(189) 评论(0) 推荐(0)

冒泡排序

摘要: 冒泡排序,对于这个算法来说是非常贴切的名称。这个算法的基本思路就是让数组想水中的气泡一样小的往上浮,大的往下沉淀。从而使得数组有序。做法很简单:如果数组为an第一次循环整个数组长度n一旦发现相邻的两个数坐标大的比较小那么就交换数据保证大的数坐标比较大,就这样一直比较到最后一个数,那么一定有a[n] = Max {an};那么下一次循环就减一次,这样a[n-1]就是除了Max {an}以外最大的数。这样完成一趟又一趟交换之后就使得整个数组有序。代码如下: 1 void bubble_sort(int array[], int n) 2 3 { 4 5 int tmp, tlen;... 阅读全文

posted @ 2013-07-03 21:57 XCoderLiu 阅读(202) 评论(0) 推荐(0)

导航