排序算法:快速排序

荷兰国旗问题1

给定一个数组和一个数num,把<=num的数放在数组左边,>num的数放在数组右边

void calc(int *arr, int n, int num)
{
	int l = -1;
	int temp;
	for(int i=0;i<n;i++)
	{
		if(arr[i] <= num)
		{
			temp = arr[l+1];
			arr[l+1] = arr[i];
			arr[i] = temp;
			l++;
		}
	}
}

荷兰国旗问题2

给定一个数组和一个数,<num的数放在左边,=num的数放在中间,>num的数放在右边

void calc(int *arr, int n, int num)
{
	int l = -1;
	int r = n + 1;
	int temp;
	int idx = 0;
	while(idx < r)
	{
		if(arr[idx] < num)
		{
			temp = arr[l+1];
			arr[l+1] = arr[idx];
			arr[idx] = temp;
			l++;
            idx++;
		}
		else if(arr[idx] > num)
		{
			temp = arr[r-1];
			arr[r-1] = arr[idx];
			arr[idx] = temp;
			r--;
		}
        else
        {
            idx++;
        }
	}
}

快速排序

时间复杂度:O(N*logN)

空间复杂度:O(logN)

稳定性:不稳定

方法的基本思想是:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数。

void swap(int *arr, int x, int y)
{
	int temp;
	temp = *(arr + x);
	*(arr + x) = *(arr + y);
	*(arr + y) = temp;
	 
}
int* temp(int *arr, int l, int r)
{
	int cmp = arr[r];
	int idx = l;
	int *result = (int *)malloc(sizeof(int)*2);
	memset(result, 0, sizeof(int)*2);
	while(idx <= r)
	{
		if(arr[idx] < cmp)
		{
			swap(arr, l++, idx++)
		}
		else if(arr[idx] > cmp)
		{
			swap(arr, r--, idx);
		}
		else
		{
			idx++;
		}
	}
	*(result + 1) = idx--;
	while(arr[idx] == cmp)
	{
		idx--;
	}
	*result = idx;
	return result;	
}

void qsrot(int *arr, int l, int r)
{
	int *res = NULL;
	if(l >= r)
	{
		return;
	}
	
	res = temp(arr, l, r);
	qsrot(arr, l, *res);
	qsrot(arr, *(res+1), r);
	
	free(res);
}
相关推荐
GISer_Jing8 小时前
Javascript排序算法(冒泡排序、快速排序、选择排序、堆排序、插入排序、希尔排序)详解
javascript·算法·排序算法
谏君之15 小时前
C语言实现的常见算法示例
c语言·算法·排序算法
让我们一起加油好吗19 小时前
【排序算法】六大比较类排序算法——插入排序、选择排序、冒泡排序、希尔排序、快速排序、归并排序【详解】
c语言·算法·排序算法
myprogramc1 天前
十大排序算法
数据结构·算法·排序算法
BUG 劝退师2 天前
八大经典排序算法
数据结构·算法·排序算法
五味香3 天前
C语言学习,插入排序
android·c语言·开发语言·数据结构·学习·算法·排序算法
尼尔森系3 天前
排序与算法:希尔排序
c语言·算法·排序算法
Stanford_11063 天前
C++中常用的十大排序方法之3——插入排序
c++·算法·微信小程序·排序算法·微信公众平台·twitter·微信开放平台
MZWeiei3 天前
排序算法:冒泡排序
数据结构·算法·排序算法
7yewh4 天前
八大排序算法(1)插入排序-直接插入排序 和 希尔排序
数据结构·算法·排序算法