分享一个常用的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);
}
}