快速排序算法的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;
}

尴尬突然想到这个写法有点问题,回去再重写这个算法函数。下班鸟。。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值