快速排序算法——陀螺仪原始数据处理

在陀螺仪原始数据滤波时,需要用到排序算法去除最大最小值,首先想到的就是冒泡排序,但是由于冒泡排序时间复杂度高,所以就学习了一下更为高效的快速排序,在此记录,聊胜于无。

关键点:

1、找到基准元素对应的正确顺序位置
2、以这个位置前后进行递归

找到基准元素对应的正确顺序位置
  • 假设一个数组为[15,3,2,45,99],一般来说都以数组的第一个元素为基准元素 所以基准元素:val = 15;
  • 队尾指针:先从数组末尾开始往前搜索,大于等于基准元素的不管,继续往前,如果小于基准元素,就把这个值直接给到队首指针当前指向位置。
  • 队首指针:然后从数组开头向后搜索,小于等于基准元素的不管,继续往后,如果大于基准元素,就直接把这个值给到首指针当前指向位置。
  • 直到两个指针指向同一个位置,这个位置就是基准元素正确顺序所在位置。

绿色:基准元素位置
粉色:队首指针位置
蓝色:队尾指针位置
灰色:两指针重叠位置
黄色:基准元素正确位置
在这里插入图片描述

C语言算法实现:

/************************************************
@ 函数:找到基准元素的正确位置,并将基准元素放到正确位置上
@ 入口参数:
			a:数组名称
			low:队首指针位置,也就是从哪里开始排序
			high:与上同义
@ 返回值:基准元素位置
************************************************/
float FindPos(float* a,int low,int high)
{
	float val = a[low];		//将数组第一个元数作为基准元素
	while(low < high)
	{
		while(low < high && a[high] >= a[low])
			high--;
		a[low] = a[high];
		
		while(low < high && a[low] <= a[high])
			low++;
		a[high] = a[low];
	}
	a[low] = val;
	return low;
}



/************************************************
@ 函数:快速排序数组
@ 入口参数:
			a:数组名称
			low:队首指针位置,也就是从哪里开始排序
			high:与上同义
@ 返回值:基准元素位置
************************************************/
void QuickSort(float* a,int low,int high)
{
	int pos;
	if(low < high)
	{
		pos = FindPos(a,low,high);
		QuickSort(a,low,pos-1);
		QuickSort(a,pos+1,high);
	}
}
  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值