C语言 手写快速排序

c语言中自己本身就存在快速排序的函数qsort()。
但是也会有一些问题是建立在快速排序的变形比如说按照一定的规则排序,或者说是链表的快速原地排序,这就需要对快速排序的方法进行一些改进。
这是一个例题,输入一串数,对这些数按照绝对值大小进行排序。
C语言 手写快速排序

首先用连续的scanf将数字串输入进数组中,终止通过EOF在linux中是ctrl+D。
然后排序通过函数quick_sort实现。
C语言 手写快速排序
C语言 手写快速排序
这是快速排序的核心。首先是整体上的结构,快速排序的一次完成是首先确定一个“枢纽值”,用双指针一个从头开始寻找,一个从尾部开始倒序遍历,正向遍历遇到比枢纽值大的就停下来,反向遍历遇到比枢纽值小的就停下来,然后将这两这个值交换位置,一次循环下来的结果是双指针交错的位置前面全部是比枢纽值小的,后面全部是比枢纽值小的,最后返回两指针停下来的位置。然后就形成了三块区域,[0.枢纽位置-1],枢纽位置,[枢纽位置+1,n-1]。在同时继续左侧和右侧进行递归,就可以完成整体的排序了。
C语言 手写快速排序
程序结果如下:
C语言 手写快速排序