多语言快速排序算法

快速排序是一种高效的排序算法,使用分治法策略。它的基本思想是:选择一个元素作为“基准”(pivot),重新排序数列,所有比基准值小的元素摆放在基准前面,所有比基准值大的摆在基准的后面。在这个分区退出之后,该基准就处于数列的中间位置。这个过程称为分区(partition)操作。然后,递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

Java版快速排序

public class QuickSort {public static void quickSort(int[] arr, int low, int high) {if (low < high) {int pivotIndex = partition(arr, low, high);quickSort(arr, low, pivotIndex - 1);  // 对基准左边的数组进行递归排序quickSort(arr, pivotIndex + 1, high); // 对基准右边的数组进行递归排序}}private static int partition(int[] arr, int low, int high) {int pivot = arr[high];int i = (low - 1); // 小于基准的元素的索引for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;swap(arr, i, j);}}swap(arr, i + 1, high);return i + 1;}private static void swap(int[] arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}public static void main(String args[]) {int[] arr = {10, 7, 8, 9, 1, 5};int n = arr.length;quickSort(arr, 0, n - 1);System.out.println("Sorted array: ");for (int i : arr) {System.out.print(i + " ");}}
}

Kotlin版快速排序

fun quickSort(arr: IntArray, low: Int, high: Int) {if (low < high) {val pi = partition(arr, low, high)quickSort(arr, low, pi - 1)quickSort(arr, pi + 1, high)}
}fun partition(arr: IntArray, low: Int, high: Int): Int {val pivot = arr[high]var i = low - 1for (j in low until high) {if (arr[j] < pivot) {i++arr[i] = arr[j].also { arr[j] = arr[i] }}}arr[i + 1] = arr[high].also { arr[high] = arr[i + 1] }return i + 1
}fun main() {val arr = intArrayOf(10, 7, 8, 9, 1, 5)val n = arr.sizequickSort(arr, 0, n - 1)println("Sorted array: ${arr.joinToString(" ")}")
}

C版快速排序

#include <stdio.h>void quickSort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
}int partition(int arr[], int low, int high) {int pivot = arr[high];int i = low - 1;for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;int temp = arr[i];arr[i] = arr[j];arr[j] = temp;}}int temp = arr[i + 1];arr[i + 1] = arr[high];arr[high] = temp;return i + 1;
}int main() {int arr[] = {10, 7, 8, 9, 1, 5};int n = sizeof(arr) / sizeof(arr[0]);quickSort(arr, 0, n - 1);printf("Sorted array: ");for (int i = 0; i < n; i++) {printf("%d ", arr[i]);}printf("\n");return 0;
}

C++版快速排序

#include <iostream>void quickSort(int arr[], int low, int high) {if (low < high) {int pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
}int partition(int arr[], int low, int high) {int pivot = arr[high];int i = low - 1;for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;std::swap(arr[i], arr[j]);}}std::swap(arr[i + 1], arr[high]);return i + 1;
}int main() {int arr[] = {10, 7, 8, 9, 1, 5};int n = sizeof(arr) / sizeof(arr[0]);quickSort(arr, 0, n - 1);std::cout << "Sorted array: ";for (int i = 0; i < n; i++) {std::cout << arr[i] << " ";}std::cout << std::endl;return 0;
}

Dart版快速排序

void quickSort(List<int> arr, int low, int high) {if (low < high) {int pivotIndex = partition(arr, low, high);quickSort(arr, low, pivotIndex - 1);quickSort(arr, pivotIndex + 1, high);}
}int partition(List<int> arr, int low, int high) {int pivot = arr[high];int i = low - 1;for (int j = low; j < high; j++) {if (arr[j] < pivot) {i++;swap(arr, i, j);}}swap(arr, i + 1, high);return i + 1;
}void swap(List<int> arr, int i, int j) {int temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}void main() {List<int> arr = [10, 7, 8, 9, 1, 5];quickSort(arr, 0, arr.length - 1);print("Sorted array: $arr");
}

JavaScript版快速排序

function quickSort(arr, low, high) {if (low < high) {let pi = partition(arr, low, high);quickSort(arr, low, pi - 1);quickSort(arr, pi + 1, high);}
}function partition(arr, low, high) {let pivot = arr[high];let i = low - 1;for (let j = low; j < high; j++) {if (arr[j] < pivot) {i++;swap(arr, i, j);}}swap(arr, i + 1, high);return i + 1;
}function swap(arr, i, j) {let temp = arr[i];arr[i] = arr[j];arr[j] = temp;
}// 使用示例
let arr = [10, 7, 8, 9, 1, 5];
quickSort(arr, 0, arr.length - 1);
console.log("Sorted array:", arr);

汇编语言(Assembly Language asm)快速排序

以下是一个基本的 ARM 汇编语言快速排序算法示例,适用于运行 ARM 架构处理器的 Linux 系统。请注意,这个例子是针对 ARMv7 架构编写的,可能需要根据你的具体 ARM 架构版本做出调整。

.global quicksort.data
array: .word 10, -1, 8, 3, 2, -5, 4
length: .word 7.text
quicksort:push {r4-r11, lr}mov r1, #0ldr r2, =lengthldr r2, [r2]subs r2, r2, #1bl partitionpop {r4-r11, pc}partition:push {r4-r11, lr}mov r11, r1mov r10, r0ldr r4, [r0, r2, lsl #2]
partition_loop:ldr r3, [r10, r11, lsl #2]cmp r3, r4addge r11, r11, #1blt swapcmp r11, r2blt partition_loopbl swappop {r4-r11, pc}swap:push {r4-r11, lr}ldr r3, [r10, r1, lsl #2]ldr r12, [r10, r11, lsl #2]str r12, [r10, r1, lsl #2]str r3, [r10, r11, lsl #2]pop {r4-r11, pc}

在这个示例中,quicksort 函数是快速排序算法的入口点,partition 是用于分区的函数,而 swap 函数用于交换数组中的两个元素。这些函数使用 ARM 寄存器和指令来处理数组中的元素,并执行排序算法的步骤。

要运行这个程序,你需要在支持 ARM 架构的 Linux 系统上使用适当的汇编器和链接器。在不同的 ARM 架构版本(如 ARMv6、ARMv8)上,可能需要进行语法或指令集的调整。

请注意,这只是一个基本的示例,可能需要进一步的优化和调整以适应特定的需求和环境。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/165470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python内置模块binascii,二进制数据和ASCII字符串之间进行转换

一、简介 binascii是Python标准库中的一个模块&#xff0c;提供了在二进制数据和ASCII字符串之间进行转换的功能。它包含了一些用于处理二进制数据的函数&#xff0c;可以进行二进制数据的编码、解码和转换。 二、方法 binascii.unhexlify(hexstr)&#xff1a;将十六进制表示…

事件循环机制及常见面试题

借鉴&#xff1a; 《Javascript 忍者秘籍》第二版&#xff0c;事件循环篇 面试 | JS 事件循环 event loop 经典面试题含答案 - 知乎 (zhihu.com) 概念 主栈队列就是一个宏任务&#xff0c;每一个宏任务执行完就会执行宏任务中的微任务&#xff0c;直到微任务全部都执行完&a…

Python 使用XlsxWriter操作Excel

在数据处理和报告生成的领域中&#xff0c;Excel 文件一直是广泛使用的标准格式。为了让 Python 开发者能够轻松创建和修改 Excel 文件&#xff0c;XlsxWriter 库应运而生。XlsxWriter 是一个功能强大的 Python 模块&#xff0c;专门用于生成 Microsoft Excel 2007及以上版本&a…

Vue3-provide和inject

作用和场景&#xff1a;顶层组件向任意的底层组件传递数据和方法&#xff0c;实现跨层组件通信 跨层传递普通数据&#xff1a; 1.顶层组件通过provide函数提供数据 2.底层组件通过inject函数获取数据 既可以传递普通数据&#xff0c;也可以使用ref传递响应式数据&#xff08…

批量插入SQL 错误 [933] [42000]: ORA-00933: SQL 命令未正确结束

使用DBeaver向【oracle数据库】插入大量数据 INSERT INTO Student(name,sex,age,address,birthday) VALUES(Nike,男,18,北京,2000-01-01) ,(Nike,男,18,北京,2000-01-01) ,(Nike,女,18,北京,2000-01-01) ,(Nike,女,18,北京,2000-01-01) ,(Nike,男,18,北京,2000-01-01) ,(Nike…

使用Arrays.Sort并定制Comparator排序解决合并区间

合并区间-力扣算法题56题 以数组 intervals 表示若干个区间的集合&#xff0c;其中单个区间为 intervals[i] [starti, endi] 。请你合并所有重叠的区间&#xff0c;并返回 一个不重叠的区间数组&#xff0c;该数组需恰好覆盖输入中的所有区间 。 示例 1&#xff1a; 输入&am…

新能源行业碳酸氢锂纯化除钙镁工艺

在碳酸氢锂纯化中常规的沉淀或者其它工艺不能够满足钙镁等碱土金属的深度去除。通常采用离子交换工艺实现钙离子、镁离子的去除&#xff0c;以提升碳酸锂的品质&#xff0c;但是国产树脂在此行业应用中存在的使用量过大的问题&#xff0c;会导致设备造价偏高、废水量太大&#…

C++二分向量算法:最多可以参加的会议数目 II

本题的其它解法 C二分算法&#xff1a;最多可以参加的会议数目 II 本文涉及的基础知识点 二分查找算法合集 题目 给你一个 events 数组&#xff0c;其中 events[i] [startDayi, endDayi, valuei] &#xff0c;表示第 i 个会议在 startDayi 天开始&#xff0c;第 endDayi …

gitt开源项目的意义,公司为什么会对在gitt上有开源项目的人更大机会

Git是一种分布式版本控制系统&#xff0c;它可以帮助程序员管理代码的历史版本和协同工作。同时&#xff0c;Git也成为了开源项目的主要托管平台之一。Git的开源项目意义重大&#xff0c;因为这种开源项目托管平台可以帮助开发者将代码和项目分享给全球的开发者&#xff0c;并且…

从0开始学习JavaScript--JavaScript元编程

JavaScript作为一门灵活的动态语言&#xff0c;具备强大的元编程能力。元编程是一种通过操作程序自身结构的编程方式&#xff0c;使得程序能够在运行时动态地创建、修改、查询自身的结构和行为。本文将深入探讨JavaScript中元编程的各个方面&#xff0c;包括原型、反射、代理等…

2023亚太杯数学建模C题思路模型代码

已完成C题思路代码&#xff0c;文末名片获取 C题是我们的一个数据分析问题&#xff0c;这个题目主要就是我们要去收集数据&#xff0c;清洗处理后进行分析。 问题1&#xff1a;分析影响中国新能源电动汽车发展的主要因素&#xff0c;建立数学模型&#xff0c;描述这些因素对中…

对未来新能源车测试工具的看法

汽车行业正在经历变革的说法算是比较轻描淡写的了&#xff0c;还记得我1983年加入这个行业时&#xff0c;行业聚焦点是引入发动机管理系统。当时还是以家庭掀背车为主的时代&#xff0c;发动机分析仪的体积像衣柜一样大&#xff0c;还没出现“CAN”通信协议。现在经常听到我的导…

PHP预约上门回收废品系统的代码披露

PHP预约上门回收废品系统的代码披露 <?phpnamespace app\admin\controller;class Code {public function getTopDomainhuo(){error_reporting(0);$host $_SERVER["HTTP_HOST"];$matchstr "[^\\.]\\.(?:(" . $host . ")|\\w{2}|((" . $ho…

【第一部分:概述】ARM Realm Management Monitor specification

目录 概述机密计算系统软件组成MonitorRealmRealm Management Monitor (RMM)Virtual Machine (VM)HypervisorSecure Partition Manager (SPM)Trusted OS (TOS)Trusted Application (TA) Realm Management Monitor 参考文献 概述 RMM是一个软件组件&#xff0c;它构成了实现ARM…

机器学习笔记 - 复杂任务的CNN组合

基础CNN架构可通过多种方式进行组合和扩展,从而解决更多、更复杂的任务。 1. 分类和定位 在分类和定位任务中,你不仅需要说出在图像中找到的物体的类别,而且还需指出物体显现在图像中的边界框坐标。这类任务假设在图像中只有一个物体实例。 这个任务可通过在典型的分类网络…

每日一题(LeetCode)----链表--两数相加

每日一题(LeetCode)----链表–两数相加 1.题目&#xff08;2. 两数相加&#xff09; 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返…

深入ReentrantReadWriteLock(一)

一、为什么要出现读写锁 synchronized和ReentrantLock都是互斥锁。 如果说有一个操作是读多写少的&#xff0c;还要保证线程安全的话。如果采用上述的两种互斥锁&#xff0c;效率方面很定是很低的。 在这种情况下&#xff0c;咱们就可以使用ReentrantReadWriteLock读写锁去实现…

React16中打印事件对象取不到值的现象及其原因分析

React16中打印事件对象取不到值的现象及其原因分析 一、背景 在最近的开发过程中&#xff0c;遇到了一个看起来匪夷所思的问题❓&#xff1a; <Inputplaceholder"请输入"onChange{(e) > {console.log(e:, e)}}onKeyDown{handleKeyDown} />此时按理来说我…

旅行商问题(枚举,回溯,动态规划,贪心,分支界限)

文章目录 问题描述暴力枚举回溯法动态规划法贪心法分支界限法 问题描述 假设有一个货郎担要拜访n个城市&#xff0c;他必须选择所要走的路程&#xff0c;路程的限制时每个城市只能拜访一次&#xff0c;而且最后要走到原来出发的城市&#xff0c;要求路径长度。 旅行商问题将要…