码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序(C语言)

时间:2015-03-18 12:26:19      阅读:130      评论:0      收藏:0      [点我收藏+]

标签:快速排序   递归   非递归   

非递归:

#include <stdio.h>
#include <stdlib.h>

int partition(int s[], int i, int j)
{
	int value = 0;
	int flag = 1; //判断该从头循环还是尾循环
	value = s[i];
	while(i<j)
	{
		switch(flag)
		{
		case 0:
			if(s[i] < value)
				i++;
			else
			{
				s[j--] = s[i];
				flag = 1;
			}
			break;
		case 1:
			if(s[j] >= value)
				j--;
			else
			{
				s[i++] = s[j];
				flag = 0;
			}
			break;
		}
	}
	s[i] = value;
	return i;
}

void quick_sort(int s[], int l, int r)
{
	int *stack = (int *)malloc(sizeof(int)*(r-l+1));
	int top = 0;
	int index1, index2;
	int res;
	stack[top++] = r;
	stack[top++] = l;
	while(top!=0)
	{
		index1 = stack[--top];
		index2 = stack[--top];
		res = partition(s, index1, index2);

		if(res != index2) //后部分partiton未结束
		{
			stack[top++] = index2;
			stack[top++] = res+1;
		}
		if(res != index1) //前部分partion未结束
		{
			stack[top++] = res-1;
			stack[top++] = index1;
		}
	}
	free(stack);
	stack = NULL;
}

int main()
{
	int number[10] = {8, 1, 8, 4, 9, 5, 8, 10, 3, 6};
	quick_sort(number, 0, 9);
	int i;
	for(i=0; i<10; i++)
	{
		printf("%d, ", number[i]);
	}
	printf("\n");
	return 0;
}



递归:

#include <stdio.h>
#include <stdlib.h>

int partition(int s[], int i, int j)
{
	int value = 0;
	int flag = 1; //判断该从头循环还是尾循环
	value = s[i];
	while(i<j)
	{
		switch(flag)
		{
		case 0:
			if(s[i] < value)
				i++;
			else
			{
				s[j--] = s[i];
				flag = 1;
			}
			break;
		case 1:
			if(s[j] >= value)
				j--;
			else
			{
				s[i++] = s[j];
				flag = 0;
			}
			break;
		}
	}
	s[i] = value;
	return i;
}

void quick_sort(int s[], int l, int r)
{
	int res;
	if(l<r)
	{
		res = partition(s, l, r);
		quick_sort(s, l, res-1);
		quick_sort(s, res+1, r);
	}
}

int main()
{
	int number[10] = {8, 1, 8, 4, 9, 5, 8, 10, 3, 6};
	quick_sort(number, 0, 9);
	int i;
	for(i=0; i<10; i++)
	{
		printf("%d, ", number[i]);
	}
	printf("\n");
	return 0;
}


快速排序(C语言)

标签:快速排序   递归   非递归   

原文地址:http://blog.csdn.net/zuijinhaoma8/article/details/44407889

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!