ESP-IDF:快速排序测试
/快速排序测试/
 void printArray(int arr[], int len)
 {
 for (int i = 0; i < len; i++)
 {
 cout << arr[i] << " ";
 }
 cout << endl;
 }
void QuickSort(int arr[], int start, int end)
 {
 int i = start;
 int j = end;
 // 找一个基准数
 int temp = arr[i]; // temp保存了arr[i]的值,arr[i]目前就是坑了
 if (i < j)
 { // 循环的条件是i小于j
 while (i < j)
 {
 while (i < j && arr[j] >= temp)
 { // 从右往左找比temp小的数,找到了跳出这个循环
 j–;
 }
 if (i < j)
 {
 arr[i] = arr[j]; // 把这个数放到arr[i]这个坑中,目前arr[j]就是坑了
 i++; // 左边指针往右走
 }
 while (i < j && arr[i] < temp)
 { // 然后从左往右找比temp大的数,找打后跳出这个循环
 i++;
 }
 if (i < j)
 {
 arr[j] = arr[i]; // 把这个数放到arr[j]这个坑中
 j–; // 右边指针往左走
 }
 }
 arr[i] = temp; // 当i=j的时候,arr[i]这个坑的左边都是比基准值temp小的数,右边都是比基准值大的数,把temp填进坑中
 QuickSort(arr, start, i - 1); // 左边递归挖坑填坑
 QuickSort(arr, i + 1, end); // 左边递归挖坑填坑
 }
 }
 void QuickSort02(int arr[], int start, int end)
 {
 int R = start;
 int L = end;
 int temp = arr[R]; // 把第一个值作为基准数,arr[R]目前是坑i
 // 开始递归,递归推出条件是左右指针相等
 if (R < L)
 {
 while (R < L)
 { // 先从右往左找比基准值temp小的数
 while (R < L && arr[L] >= temp)
 { // 没找到继续跑,找到了跳出这个小循环
 L–;
 }
 if (R < L)
 {
 arr[R] = arr[L]; // 填坑arr[R],同时arr[L]变成了坑
 R++;
 }
 while (R < L && arr[R] < temp)
 { // 然后从左往右找比基准值temp大的数//没找到继续跑,找到了跳出这个小循环
 R++;
 }
 if (R < L)
 {
 arr[L] = arr[R]; // 填坑arr[L],同时arr[R]变成了坑
 L–;
 }
 }
 arr[R] = temp; // arr[R]左边都是比基准值小的数,右边都是比基准值大的数,用基准值把这个坑填上
 QuickSort02(arr, start, R - 1);
 QuickSort02(arr, R + 1, end);
 }
 }
 void test13()
 {
 cout << “--------test 快速排序--------” << endl;
int arr[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
//       int arr[] = {5, 7, 9, 21, 33, 3, 2, 5, 8, 0};
printArray(arr, sizeof(arr) / sizeof(int));
QuickSort(arr, 0, sizeof(arr) / sizeof(int) - 1); // 注意数组下标是从0开始的
printArray(arr, sizeof(arr) / sizeof(int));
int arr02[] = {9, 8, 7, 6, 5, 4, 3, 2, 1, 0};
printArray(arr02, sizeof(arr02) / sizeof(int));
QuickSort02(arr02, 0, sizeof(arr02) / sizeof(int) - 1);
printArray(arr02, sizeof(arr02) / sizeof(int));
}
extern “C” void app_main(void)
 {
 test13();
 }
结果:




















