多語言快速排序算法

快速排序是一種高效的排序算法,使用分治法策略。它的基本思想是:選擇一個元素作為“基準”(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.pswp.cn/news/165470.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/165470.shtml
英文地址,請注明出處:http://en.pswp.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;要求路徑長度。 旅行商問題將要…