首页 > 其他分享 >递归排序之快速排序(挖坑法)

递归排序之快速排序(挖坑法)

时间:2023-08-28 16:55:04浏览次数:45  
标签:high 递归 unsigned char 挖坑 low array 排序

 1 #include <stdio.h>
 2 
 3 
 4 unsigned char standard(unsigned char* array,unsigned char low, unsigned char high)
 5 {
 6     unsigned char key = array[low];
 7     while(low<high)
 8     {
 9         while(low<high && array[high] >= key)        
10             high--;            
11         if(low < high)
12             array[low] = array[high];
13         while(low<high && array[low] <= key)
14             low++;
15         if(low < high)
16             array[high] = array[low]; 
17     }
18     array[low] = key;
19     return low;
20 }
21  
22 void quicksort(unsigned char* array,unsigned char low, unsigned char high)
23 {
24     unsigned char no;
25     if(low < high)
26     {
27         no = standard(array,low,high);
28         if(no)
29             quicksort(array,low,no - 1);
30         quicksort(array,no + 1,high);
31     }
32 }
33 
34 int main(void) {
35     unsigned char i;
36     unsigned char array[10] = {4,1,3,9,6,2,8,5,0,7};
37     printf("Hello World\n");
38     quicksort(array,0,9);
39     for(i=0;i<10;i++)
40     {
41         printf("%d\n",array[i]);
42     }
43     return 0;
44 }

 

标签:high,递归,unsigned,char,挖坑,low,array,排序
From: https://www.cnblogs.com/njit-sam/p/17646457.html

相关文章

  • 基础排序
    选择排序指针表示法voidchoose_sort(int*arr,intn){  for(inti=0;i<n;i++){    intminIndex=i;    for(intj=i+1;j<n;j++){      if(*(arr+j)<*(arr+minIndex)){        minIndex=......
  • 堆排序
    堆是以二叉树为结构组成的一个序列,一般以数组进行实现,如设N=1为根节点,则左节点2*N,右节点2*N+1,以此构建一整个堆。堆结构体的数据结构typedefintItem;typedefstructmaxHeap{  Item*data; //堆的数组实现  intcount; //实际存在的数据量}maxHea......
  • 【校招VIP】前端算法考察之排序
    考点介绍:不同的场景中,不同的排序算法执行效率不同。稳定:冒泡、插入、归并不稳定:选择、快速、堆排序、希尔排序一、考点题目1、使用js实现数组的快速排序解答:快速排序使用了冒泡+分治的思路。每轮从数组中取出一个数作为基准;在排序过程中,小于或等于基准数的全部放到基准的左......
  • sql根据子表的条数排序
    您可以使用子查询和聚合函数来根据子表的条数排序,以下是一个示例:假设有两张表:orders和order_items,其中orders表包含订单信息,而order_items表包含每个订单的订单项信息。首先,您可以编写一个子查询来计算每个订单的订单项数量,并将其命名为order_item_count:SELECTorder_id,......
  • 递归与分治
    递归递归的基本思想是某个函数直接或者间接地调用自身,这样原问题的求解就转换为了许多性质相同但是规模更小的子问题。求解时只需要关注如何把原问题划分成符合条件的子问题,而不需要过分关注这个子问题是如何被解决的。递归代码最重要的两个特征:结束条件和自我调用。自我调用是......
  • 不用循环和递归判断值在数组中的索引
    ////数组集合string[]str=newstring[]{"a","b","c","d","e","f","g"};////要查找的字符串stringNum="c";////使用Linq查询,将索引和值查出来,////新建一个匿名类,属性包括aabool类型,和Index索引......
  • master公式 归并排序 小和问题 逆序对问题 荷兰国旗问题 快排
    递归行为时间复杂度计算:master公式T(N)=a*T(N/b)+O(Nd)N:母问题规模a:子问题计算次数N/b:子问题规模O(Nd):每次递归除子问题外其他操作时间复杂度1)log(b,a)>d : T(N)=O(Nlog(b,a)) 2)log(b,a)<d : T(N)=O(Nd) 3)log(b,a)==d : T(N)=O(Nd*logN) 使用ma......
  • 剑指Offer 25. 合并两个排序的链表
    题目链接:剑指Offer25.合并两个排序的链表题目描述:输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。解法思路:在两链表向后遍历的过程中,哪个更小一点,哪个先放在合并后的链表中。最后哪个链表剩余,直接接在合并链表的后面即可。代码:/***Definit......
  • 【题解】 P7077 [CSP-S2020] 函数调用(拓扑排序)
    题意题目给定了一个长度为\(n\)序列\(a\)与\(m\)个操作,操作一共有3种:1.给定\(x,y\),使\(a_x\)增加\(y\)。2.给定\(x\),使\(a\)中所有数全部乘上\(x\)。3.给出k个数\(c_1,c_2,...,c_k\),表示这个操作的任务是按照先后顺序执行编号为\(c_1,c_2,...,c_k\)的\(k\)的操作。最后,题目相......
  • 「算法与数据结构」梳理6大排序算法 为了offer!
    6种排序如下......