快速排序算法的C语言实现
Posted 小喽啰A
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序算法的C语言实现相关的知识,希望对你有一定的参考价值。
算法特别特别重要,至少我现在是这么认为。我觉得真正懂算法的程序员才能算得上是一个合格程序员,仅仅熟练使用某个程序设计语言的程序员只能算是码农。为了当一个合格的程序员,我要开始学习算法了。哈哈,自己加油。
今天要记录自己刚刚研究的快速排序算法。
快排算法也属于分治法。其核心思想是,将一个数组根据规则拆分成两个数组,然后递归排序两个数组;使用快速排序算法的好处就是节省内存空间,直接在原数组上面排序就可以了,不需要使用额外的内存空间。
快速排序算法的步骤如下,
1、选定数组第一个元素为根元素,将小于根元素的数放到根元素的左侧,大于或者等于根元素的数放到右侧;
2、将左右两侧的子数组分别递归调用步骤1;
伪代码:
int quickSort(array, start, end)//快速排序函数,返回值的是个标记。小于0代表不需要继续排序了;
if(start >= end)
结束;
执行步骤1,定位出根节点的位置为i;
quickSort(array, start, i-1);
quickSort(array, i+1, end);
c语言实现代码如下
#include <stdio.h>
int quick_sort(int *, int , int);
int main(int argc, char **argv)
int arr[] = 6, 10, 13, 5, 8, 3, 2, 11;
int i, j;
int len = sizeof(arr)/sizeof(int) ;
if( quick_sort(arr, 0, len - 1) == -1)
printf("sort error!\\n");
else
for(i=0; i<len; i++)
printf("%d\\t", *(arr+i));
printf("\\n");
int quick_sort(int *array, int start_index, int end_index)
printf("start: %d, end: %d;\\n", start_index, end_index);
if( start_index >= end_index )
return 0;
int temp;
int i, j;
int x = array[ start_index ];
i = start_index;
for(j = start_index + 1; j <= end_index; j++ )
if( array[j] < x )
i += 1;
temp = array[j];
array[j] = array[i];
array[i] = temp;
temp = array[i];
array[i] = array[start_index];
array[start_index] = temp;
quick_sort(array, start_index, i-1);
quick_sort(array, i+1, end_index);
return 0;
突然想到这个写法有点问题,回去再重写这个算法函数。下班鸟。。。。
以上是关于快速排序算法的C语言实现的主要内容,如果未能解决你的问题,请参考以下文章