缠丝猫 发表于 2024-2-8 08:03:24

算法【快速排序】

算法【快速排序】

快速排序。选择一个作为比较的元素,这里我们选择首元素,这个元素我叫他‘比较元素’;前后两个指针(其实是索引变量)同时往后和往前进行遍历,开头的指针遇到比‘比较元素’大的元素停下来(空循环体的循环即可实现),末尾的指针往前遍历,遇到比‘比较元素’小的元素停下来;两个元素都停止后,交换两个元素,交换后通过外面的大循环继续让指针运动起来;当两个指针相遇或交错时,退出大循环;之后将从后面跑来的指针的元素与‘比较元素(首元素)’交换(因为这时这个从后面跑来的指针一定指向小于或等于首元素的元素),这样可以保证后面跑来的这个指针的位置元素,前面都是小于它的元素,后面都是大于它的元素;之后前面的进行递归,后面的也进行递归,递归的出口是开始的指针大于等于结束的指针(这个开始和结束的指针是上一个大的部分传来的)。
#include #include #include #define N 10/** *快排*/void quick_sort(int *arr, int size);void recursion(int *arr, int start, int end);// 快排void quick_sort(int *arr, int size){    recursion(arr, 0, size-1);}// 快排的递归逻辑void recursion(int *arr, int start, int end){    // 第一个作为比较的元素    int comElement = arr;    // 后面首元素的下标和尾元素的下标都要改变,现在先记录一下。    int start_temp = start;    int end_temp = end;    if(start_temp =start_temp && comElement < arr);   // 后元素小于起始元素 或 该位置元素小于等于比较元素时停止后移      end++;      // 将最后往前移多的下标加上。      if(start >= end) break;   // 后位置大于前位置,不进行交换      // 这里不能使用异或 或者 相加 的方式交换, 因为可能操作的是同一个元素。      int temp = arr;      arr = arr;      arr = temp;      }      int temp = arr;      arr = arr;      arr = temp;      static int x_20231217 = 1;      printf("第%d趟排序结果为:\t", x_20231217++);      for(int i = 0; i
页: [1]
查看完整版本: 算法【快速排序】