排序——快速排序(顺序表存储)

news/2024/5/19 23:07:36 标签: 快速排序

 

案例:

一趟快速排序的过程:

 

代码:

#include <stdio.h>
 
void Qsort(int arr[], int low, int high){
    if (high <= low) return;
    int i = low;
    int j = high + 1;
    int key = arr[low];
    while (true)
    {
        /*从左向右找比key大的值*/
        while (arr[++i] < key)
        {
            if (i == high){
                break;
            }
        }
        /*从右向左找比key小的值*/
        while (arr[--j] > key)
        {
            if (j == low){
                break;
            }
        }
        if (i >= j) break;
        printf("a[%d] = %d\ta[%d] = %d\n", i, arr[i], j, arr[j]);
        
        /*交换i,j对应的值*/
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
        for (int m = 0; m <= high; m++) {
    		printf("%d\t", arr[m]);
    	}
   		printf("\n");
    }
    /*中枢值与j对应值交换*/
    int temp = arr[low];
    arr[low] = arr[j];
    arr[j] = temp;
    
    printf("\n\n一趟排序结果\n");
    for (int m = 0; m <= high; m++) {
    	printf("%d\t", arr[m]);
    }
    printf("\n");
    
    //递归调用函数,分别对两边进行同样的操作
    Qsort(arr, low, j - 1);
    Qsort(arr, j + 1, high);
}
 
int main()
{
    int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24};
 
    printf("------------------初始序列star------------------\n");
 	for (int m = 0; m < 9; m++) {
    	printf("%d\t", a[m]);
    }
    printf("\n------------------初始序列end------------------\n");
    printf("\n");
    Qsort(a, 0, 8);/*这里原文第三个参数要减1否则内存越界*/
    printf("\n\n最终结果\n");
    for(int i = 0; i < 9; i++)
    {
        printf("%d\t", a[i]);
    }
     
    return 0;
}

运行结果:

------------------初始序列star------------------
57      68      59      52      72      28      96      33      24
------------------初始序列end------------------

a[1] = 68       a[8] = 24
57      24      59      52      72      28      96      33      68
a[2] = 59       a[7] = 33
57      24      33      52      72      28      96      59      68
a[4] = 72       a[5] = 28
57      24      33      52      28      72      96      59      68


一趟排序结果
28      24      33      52      57      72      96      59      68


一趟排序结果
24      28      33      52


一趟排序结果
24      28      33      52
a[6] = 96       a[8] = 68
24      28      33      52      57      72      68      59      96


一趟排序结果
24      28      33      52      57      59      68      72      96


一趟排序结果
24      28      33      52      57      59      68


最终结果
24      28      33      52      57      59      68      72      96
--------------------------------

 


http://www.niftyadmin.cn/n/960792.html

相关文章

2018.4.27 六周第三次课 (awk工具)

awk工具介绍 awk也是流行的编辑器&#xff0c;针对文档中的行来操作&#xff0c;一行一行的操作&#xff1b; awk具备sed的所有功能&#xff0c;而且更强大。 awk截取文档中的某个段落&#xff0c;示例如下&#xff1a; -F选项的作用是指定分隔符&#xff0c;如果不加-F选项&am…

排序——归并排序(顺序存储)

基本思想&#xff1a; 将序列每相邻两个数字进行归并操作&#xff08;merge)&#xff0c;形成floor(n/2n%2)个序列&#xff0c;排序后每个序列包含两个元素 将上述序列再次归并&#xff0c;形成floor(n/4)个序列&#xff0c;每个序列包含四个元素 重复步骤2&#xff0c;直到…

go 服务监控指标(metric)上报open-falcon

1. 概述 指标统计是实现APM&#xff08;Application performance management)的基础&#xff0c;通常通过一些指标的统计以及上报&#xff0c;我们可以了解程序的运行状况&#xff0c;及时发现程序的问题&#xff0c;提前预估系统瓶颈&#xff0e; 指标(metric)目前的实现有met…

排序——冒泡(起泡)排序

冒泡排序的基本思想&#xff1a; 比较相邻的元素。如果第一个比第二个大&#xff0c;就交换他们两个。 对每一对相邻元素做同样的工作&#xff0c;从开始第一对到结尾的最后一对。在这一点&#xff0c;最后的元素应该会是最大的数。 针对所有的元素重复以上的步骤&#xff0c…

用js来实现那些数据结构12(散列表)

上一篇写了如何实现简单的Map结构&#xff0c;因为东西太少了不让上首页。好吧。。。 这一篇文章说一下散列表hashMap的实现。那么为什么要使用hashMap&#xff1f;hashMap又有什么优势呢&#xff1f;hashMap是如何检索数据的&#xff1f;我们一点一点的来解答。 在我们学习一门…

从技术角度聊聊,短视频为何让人停不下来?

2018-08-22 阿里技术阿里妹导读&#xff1a;基于时间碎片化、视频交互强、内容丰富、体验好等因素&#xff0c;短视频近几年处在流量风暴的中心&#xff0c;各大平台纷纷涉足短视频领域。因此&#xff0c;平台对短视频内容的推荐尤为重要&#xff0c;千人千面是短视频推荐核…

day04_MySQL学习笔记_01

一、数据库概述 数据库&#xff08;DataBase&#xff0c;DB&#xff09;&#xff1a;指长期保存在计算机的存储设备上&#xff0c;按照一定规则组织起来&#xff0c;可以被各种用户或应用共享的数据集合。(文件系统) 数据库管理系统&#xff08;DataBase Management System&…

机器人--避障技术盘点

机器人–避障技术盘点 文章目录 机器人--避障技术盘点一.背景二.当前运用较多的障碍物检测方法2.1超声波TOF测距2.1.1 换能器2.2 红外PSD测距2.2.1 KODENSHI可天士2.2.2 Sharp2.2.3 维尔克斯光电2.3 (单目)结构光技术2.4 激光TOF测距2.4.1 iTOF与dTOF2.5 双目视觉2.5.1 双目视…