分享一个常用的arduino快速排序算法
/*函数输入
* arr[]:要排序的数组
* start:数组中从哪开始
* length:从开始的位置算,有多少内容要排序
*/
void quickSort(float arr[], int start, int length)
{
if (start< length)
{
int i = start, j = length;float x = arr[start];
while (i < j)
{
while(i < j && arr[j]>= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
arr[i++] = arr[j];
while(i < j && arr[i]< x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
arr[j--] = arr[i];
}
arr[i] = x;
quickSort(arr, start, i - 1); // 递归调用
quickSort(arr, i + 1, length);
}
}
举个例子
float numd[32]={28.2,27.2,28.6,29.2,28.6,28.0,32.7,27.5,28.6,28.0,33.0,27.2,28.8,28.6,32.8,27.6,28.2,28.8,33.1,27.4,28.8,28.8,29.3,27.8,28.5,28.7,28.3,28.0,29.3,28.5,28.3,28.3};
void quickSort(float s[], int l, int r);
void setup() {
Serial.begin(9600);
quickSort(numd,0,31);
//打印看一下
for(int i=0;i<32;i++){
Serial.print(numd[i],1);
Serial.print(",");
}
}
void loop() {
}
/*函数输入
* arr[]:要排序的数组
* start:数组中从哪开始
* length:从开始的位置算,有多少内容要排序
*/
void quickSort(float arr[], int start, int length){
if (start< length)
{
int i = start, j = length;float x = arr[start];
while (i < j)
{
while(i < j && arr[j]>= x) // 从右向左找第一个小于x的数
j--;
if(i < j)
arr[i++] = arr[j];
while(i < j && arr[i]< x) // 从左向右找第一个大于等于x的数
i++;
if(i < j)
arr[j--] = arr[i];
}
arr[i] = x;
quickSort(arr, start, i - 1); // 递归调用
quickSort(arr, i + 1, length);
}
}
本文详细介绍了一个在Arduino平台上使用的高效快速排序算法,通过示例代码展示了如何对浮点数数组进行排序,并提供了一个完整的程序框架。学习者可以借此了解在嵌入式开发中如何运用排序算法优化数据处理。
995

被折叠的 条评论
为什么被折叠?



