ホームページ Java &#&チュートリアル 比較ソートとクイックソートの詳細説明

比較ソートとクイックソートの詳細説明

Jun 27, 2017 am 09:52 AM
速い 選別 比較する

クイックソート(略してクイックソート)は、その効率性(平均O(nlogn))の高さから筆記試験問題でよく試される。

素早い並べ替えの最初のステップは、他の数値との比較や交換に使用される「ベース」を選択することです。 この「拠点」の選択はクイックソートの効率を左右しますが、拠点を選ぶために拠点を選んでしまうと本末転倒です。たとえば、最適な塩基を見つけるには、並べ替える配列全体の中央値を見つける必要がありますが、中央値を見つけるのは実際には非常にコストがかかります。通常、ベースの選択は、ソートされるシーケンス内の最初のオブジェクト、中央のオブジェクト、または最後のオブジェクトです。この記事では、最初の要素の選択を例として、簡単な分析とクイック ソートの実装を説明します。

ソート対象の列 {6, 5, 3, 1, 7, 2, 4} を例として、最初の要素 6 をベースとして選択します。

ベースを選択した後、配列要素を比較して交換する必要があります。どのように比較するのか、誰と比較するのか? クイックソートの 2 番目のステップは、配列の最初の要素と最後の要素に「センチネル」を設定することです。

ベースを選択してセンチネルを設定したら、次のステップは比較を開始することです。最初にベースと最後のセンチネル j を比較し、それがセンチネル j より大きい場合は、それと交換します。同時にセンディネル i+1

このとき、ベースはセンチネル j ではなくセンチネル i と比較されます。ベースがセンチネル i より大きい場合、センチネルはベースより大きくなるまで後方に移動し、センチネル j-1 と比較されます。も同時に交換されます。

上記の手順を繰り返して、ベースをセンチネルjと比較します。

最終的な結果は、センチネル i の位置 = センチネル j の位置を示します。このとき、ベース値はこの位置に割り当てられます。

このように、基数 6 の左側の数値はすべてそれより小さく、右側の数値はすべてそれより大きくなります。次に、再帰を使用して左右で同じ手順を実行します。配列を使用してベースを選択し、セントリーを設定し、最後に並べ替えを完了します。

Java

 1 package com.algorithm.sort.quick; 2  3 import java.util.Arrays; 4  5 /** 6  * 快速排序 7  * Created by yulinfeng on 2017/6/26. 8  */ 9 public class Quick {10     public static void main(String[] args) {11         int[] nums = {6, 5, 3, 1, 7, 2, 4};12         nums = quickSort(nums, 0, nums.length - 1);13         System.out.println(Arrays.toString(nums));14     }15     16     /**17      * 快速排序18      * @param nums 待排序数组序列19      * @param left 数组第一个元素索引20      * @param right 数组最后一个元素索引21      * @return 排好序的数组序列22      */23     private static int[] quickSort(int[] nums, int left, int right) {24         if (left < right) {25             int temp = nums[left];    //基数26             int i = left;    //哨兵i27             int j = right;    //哨兵j28             while (i < j) {29                 while (i < j && nums[j] >= temp) {30                     j--;31                 }32                 if (i < j) {33                     nums[i] = nums[j];34                     i++;35                 }36                 while (i < j && nums[i] < temp) {37                     i++;38                 }39                 while (i < j) {40                     nums[j] = nums[i];41                     j--;42                 }43             }44             nums[i] = temp;45             quickSort(nums, left, i - 1);46             quickSort(nums, i + 1, right);47         }48         return nums;49     }50 }
ログイン後にコピー

Python3

 1 #快速排序 2 def quick_sort(nums, left, right): 3     if left < right: 4         temp = nums[left]    #基数 5         i = left    #哨兵i 6         j = right    #哨兵j 7         while i < j: 8             while i < j and nums[j] >= temp: 9                 j -= 110             if i < j:11                 nums[i] = nums[j]12                 i += 113             while i < j and nums[i] < temp:14                 i += 115             if i < j:16                 nums[j] = nums[i]17                 j -= 118         nums[i] = temp19         quick_sort(nums, left, i - 1)20         quick_sort(nums, i + 1, right)21     22     return nums23 24 nums = [6, 5, 3, 1, 7, 2, 4]25 nums = quick_sort(nums, 0, len(nums) - 1)26 print(nums)
ログイン後にコピー

以上が比較ソートとクイックソートの詳細説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Xiaomi Mi 14 ProでNFC機能を有効にする方法は? Xiaomi Mi 14 ProでNFC機能を有効にする方法は? Mar 19, 2024 pm 02:28 PM

現在、携帯電話の高性能化・高機能化が進み、ほとんどの携帯電話にはモバイル決済や本人認証などに便利なNFC機能が搭載されています。ただし、一部の Xiaomi 14Pro ユーザーは、NFC 機能を有効にする方法がわからないかもしれません。次に詳しくご紹介していきます。 Xiaomi 14ProでNFC機能を有効にする方法は?ステップ 1: 携帯電話の設定メニューを開きます。ステップ 2: 「接続と共有」または「ワイヤレスとネットワーク」オプションを見つけてクリックします。ステップ 3: [接続と共有] または [ワイヤレスとネットワーク] メニューで、[NFC と支払い] を見つけてクリックします。ステップ 4: 「NFC スイッチ」を見つけてクリックします。通常、デフォルトはオフです。ステップ 5: NFC スイッチ ページで、スイッチ ボタンをクリックしてオンに切り替えます。

WPS Word で行間を設定して文書をきれいにする方法 WPS Word で行間を設定して文書をきれいにする方法 Mar 20, 2024 pm 04:30 PM

弊社でよく使っているオフィスソフトはWPSですが、長文の編集ではフォントが小さすぎて見づらい場合が多いので、フォントや文書全体を調整します。たとえば、文書の行間を調整すると、文書全体が非常に鮮明になります。友達全員にこの操作手順を覚えてもらうことをお勧めします。今日はそれを共有します。具体的な操作手順は次のとおりです。ぜひ見てください。調整したいWPSテキストファイルを開き、[スタート]メニューの段落設定ツールバーに小さな行間設定アイコン(図の赤丸部分)が表示されます。 2. 行間隔設定の右下隅にある小さな逆三角形をクリックすると、対応する行間隔の値が表示され、行間隔の 1 ~ 3 倍を選択できます (図の矢印で示すように)。 3. または、段落を右クリックすると、段落が表示されます。

iPhone 16 ProのCAD図面が公開され、2番目の新しいボタンが追加 iPhone 16 ProのCAD図面が公開され、2番目の新しいボタンが追加 Mar 09, 2024 pm 09:07 PM

iPhone 16 ProのCADファイルが公開されており、そのデザインは以前の噂と一致しています。昨年の秋、iPhone 15 Proにはアクションボタンが追加されましたが、今秋、Appleはハードウェアのサイズに若干の調整を行う予定のようです。キャプチャボタンの追加 噂によると、iPhone 16 Proには2つ目の新しいボタンが追加される可能性があり、昨年に続き2年連続で新しいボタンが追加されることになります。新しいキャプチャボタンはiPhone 16 Proの右下に設置されると噂されており、このデザインによりカメラ制御がより便利になり、アクションボタンも他の機能に使用できるようになると予想されています。このボタンは単なるシャッターボタンではなくなります。カメラに関しては現行iPより

Huawei Pocket2でTikTokをリモートで使用するにはどうすればよいですか? Huawei Pocket2でTikTokをリモートで使用するにはどうすればよいですか? Mar 18, 2024 pm 03:00 PM

画面の空中スライドは、Huawei mate60シリーズで高く評価されているHuaweiの機能であり、この機能は、携帯電話のレーザーセンサーとフロントカメラの3D深度カメラを使用して、画面を必要としない一連の機能を完了します。画面をタッチする機能は、たとえば、離れた場所から TikTok を使用することですが、Huawei Pocket 2 では、離れた場所から TikTok をどのように使用すればよいでしょうか? Huawei Pocket2で空中からスクリーンショットを撮るにはどうすればよいですか? 1. Huawei Pocket2 の設定を開きます。 2. [アクセシビリティ] を選択します。 3. クリックして [Smart Perception] を開きます。 4. [Air Swipe Screen]、[Air Screenshot]、[Air Press] スイッチをオンにするだけです。 5.使用するときは、画面から20〜40CM離れて立ち、手のひらを開いて、手のひらアイコンが画面に表示されるまで待つ必要があります。

Win11 の「マイ コンピュータ」パスの違いは何ですか?すぐに見つけられる方法! Win11 の「マイ コンピュータ」パスの違いは何ですか?すぐに見つけられる方法! Mar 29, 2024 pm 12:33 PM

Win11 の「マイ コンピュータ」パスの違いは何ですか?すぐに見つけられる方法! Windows システムは常に更新されているため、最新の Windows 11 システムにもいくつかの新しい変更と機能が追加されています。よくある問題の 1 つは、Win11 システムでユーザーが「マイ コンピューター」へのパスを見つけられないことですが、これは通常、以前の Windows システムでは簡単な操作でした。この記事では、Win11 システムでの「マイ コンピュータ」のパスの違いと、それらをすばやく見つける方法を紹介します。 Windows1の場合

WPS スコアを並べ替える方法 WPS スコアを並べ替える方法 Mar 20, 2024 am 11:28 AM

私たちの仕事では、wps ソフトウェアをよく使用します。wps ソフトウェアではデータを処理する方法がたくさんあり、機能も非常に強力です。平均値や要約などを求める関数をよく使用します。統計データに使用できるメソッドは、WPS ソフトウェア ライブラリで誰でも利用できるように用意されています。以下では、WPS でスコアをソートする手順を紹介します。これを読んだ後、経験から学ぶことができます。 1. まず、ランク付けする必要があるテーブルを開きます。以下に示すように。 2. 次に、数式 =rank(B2, B2: B5, 0) を入力します。必ず 0 を入力してください。以下に示すように。 3. 数式を入力した後、コンピュータのキーボードの F4 キーを押すと、相対参照が絶対参照に変更されます。

C言語とPHPの違いと比較分析 C言語とPHPの違いと比較分析 Mar 20, 2024 am 08:54 AM

C 言語と PHP の違いと比較分析 C 言語と PHP はどちらも一般的なプログラミング言語ですが、多くの点で明らかな違いがあります。この記事では、C 言語と PHP を比較分析し、具体的なコード例を通して両者の違いを説明します。 1. 構文と使用法: C 言語: C 言語はプロセス指向のプログラミング言語であり、主にシステムレベルのプログラミングと組み込み開発に使用されます。 C 言語の構文は比較的単純で低レベルであり、メモリを直接操作でき、効率的かつ柔軟です。 C言語はプログラマのプログラムの完全性を重視します

TrendX Research Institute: Merlin Chain プロジェクトの分析と生態学的インベントリ TrendX Research Institute: Merlin Chain プロジェクトの分析と生態学的インベントリ Mar 24, 2024 am 09:01 AM

3月2日の統計によると、ビットコインの第2層ネットワークMerlinChainのTVL総額は30億米ドルに達した。このうち、ビットコイン環境資産は90.83%を占め、15億9600万米ドル相当のBTCと4億400万米ドル相当のBRC-20資産が含まれている。先月、マーリンチェーンの合計 TVL はステーキング活動の開始から 14 日以内に 19 億 7,000 万米ドルに達し、昨年 11 月に開始され、同じく最新で同様に目を引くブラストを上回りました。 2月26日、MerlinChainエコシステムにおけるNFTの総額は4億2,000万米ドルを超え、イーサリアムに次いでNFT市場価値が最も高いパブリックチェーンプロジェクトとなった。プロジェクトの紹介 MerlinChain は OKX サポートです

See all articles