1.在一些编程题目中需要我们对一些乱序的数据进行排序.我学了几种排序方法.下面来介绍.
1.冒泡排序:
这就是冒泡排序的基本代码.首先我们要用两层for循环.第一层是从第一个数据一直遍历到最后一个.第二层是将两个相邻的函数进行比较.当这层循环结束时,我们就将数据里最大的放在的最后一位.至于为什么第二层时j<n-1-i,因为每进行完第一层循环时,就将一个数放在的应该放在的位置.此后的循环不需要在对其进行处理,所以就需要减去i,来降低循环次数.而n<i-1则是我们已经将前n-2的数排好时,最后一位自然而然就到位了.
2.快速排序:
这就是快速排序的基本代码.此代码的基本思想为首先确定一个基准元素,让比基准元素大的排在右边,比基准元素小的排在左边,这里我们将基准元素定为中间值.在逐一比对.因为进行一次后我们只是进行的简单的分堆,所以在分完后我们还需要对分好的两堆数据重复上面的处理.
3.qsort排序:
这个感觉跟快速排序差不多,但因为代码有所差异,所以也讲解一下.首先qsort里的变量分别是排序数组的起始位置,数据个数,每个数据所占的字节,compare是进行比较两个节点的函数.再来看compare是如何进行比较的,主要是去理解return 那里的代码是如何运行的.
如果 node1->x
小于 node2->x
,则返回负值;如果相等,则返回零;如果大于,则返回正值
如果 compare
函数返回值为正数(例如1),则表示第一个元素应该排在第二个元素之后,即将这两个元素进行交换。如果数组中的元素是结构体类型,那么就会根据比较函数所定义的规则,将右端点较大的区间放在后面。
如果 compare
函数返回值为负数(例如-1),则表示第一个元素应该排在第二个元素之前,即不进行交换。如果数组中的元素是结构体类型,那么就会根据比较函数所定义的规则,将右端点较小的区间放在前面。
如果 compare
函数返回值为0,则表示两个元素相等,它们的顺序可以是任意的。
以上就是我学到的几种排序