Inhaltsverzeichnis
经典算法学习——快速排序
Heim Backend-Entwicklung PHP-Tutorial 经典算法学习——快速排序_PHP教程

经典算法学习——快速排序_PHP教程

Jul 12, 2016 am 08:54 AM
算法 经典

经典算法学习——快速排序

快速排序应该算是在面试笔试中最常用的算法了,各位面试官都非常喜欢。排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,其中的思想也是用了分治法和递归的思想。示例代码上传到:https://github.com/chenyufeng1991/QuickSort

算法的基本思想是:

(1)先从数列中取出一个数作为基准数(常常选第一个数);

(2)分区过程,比这个数大的数放到它的右边,小于或等于的数全放到它的左边;

(3)再对左右区间重复第二步,直到每个区间只有一个数位置,即左边界下标等于右边界下标;

简化描述为:

1.i= L, j=R,基准数即为a[i],保存起来;

2.j--,由后向前找比它小的数,找到后将此数放到a[i]中;

3.i++,由前向后找比它大的数,找到后将此数填入到a[j]中;

4.递归执行2,3两步,直到i==j,最后将基准数填入a[i]中;

具体代码实现如下:

//
//  main.c
//  QuickSort
//
//  Created by chenyufeng on 16/1/27.
//  Copyright © 2016年 chenyufengweb. All rights reserved.
//

#include <stdio.h>

int *quickSort(int arr[],int l,int r);
void quickSort02(int *arr,int l,int r);

int main(int argc, const char * argv[]) {

    int numArr[5] = {3,6,0,9,4};

    //使用指针返回数组,返回的其实是数组的头指针;
    /**
     *  使用返回指针;
     */

//    int *retArr;
//    retArr = quickSort(numArr, 0, 4);
//    for (int i = 0; i < 5; i++) {
//        //取数组值
//        printf("%d ",*(retArr + i));
//    }


    /**
     *  直接传递引用,比较方便;
     */
    quickSort02(numArr, 0, 4);
    for (int i = 0; i < 5; i++) {
        printf("%d ",numArr[i]);
    }
}

int *quickSort(int arr[],int l,int r){
    //当左右指针相等的时候直接返回;
    if (l < r) {
        //此时的x就是基准值;
        int i = l,j = r,x = arr[l];

        //下面的while循环表示一次分治,也就是进行一次排序;
        while (i < j) {
            //先从基准值右侧找出小于基准的值;
            while (i < j && arr[j] >= x) {
                j--;
            }
            if (i < j) {
                //交换顺序,i++;
                arr[i++] = arr[j];
            }

            //从基准值左侧找出大于基准的值;
            while (i < j && arr[i] < x) {
                i++;
            }
            if (i < j) {
                //交换顺序,j--;
                arr[j--] = arr[i];
            }
        }
        //把基准值放入arr[i]位置;
        arr[i] = x;
        //递归,左右两侧分别进行快排;
        quickSort(arr, l, i - 1);
        quickSort(arr, i + 1, r);
    }
    return arr;
}

void quickSort02(int *arr,int l,int r){
    //当左右指针相等的时候直接返回;
    if (l < r) {
        //此时的x就是基准值;
        int i = l,j = r,x = arr[l];

        //下面的while循环表示一次分治,也就是进行一次排序;
        while (i < j) {
            //先从基准值右侧找出小于基准的值;
            while (i < j && arr[j] >= x) {
                j--;
            }
            if (i < j) {
                //交换顺序,i++;
                arr[i++] = arr[j];
            }

            //从基准值左侧找出大于基准的值;
            while (i < j && arr[i] < x) {
                i++;
            }
            if (i < j) {
                //交换顺序,j--;
                arr[j--] = arr[i];
            }
        }
        //把基准值放入arr[i]位置;
        arr[i] = x;
        //递归,左右两侧分别进行快排;
        quickSort(arr, l, i - 1);
        quickSort(arr, i + 1, r);
    }
}</stdio.h>
Nach dem Login kopieren

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1119561.htmlTechArticle经典算法学习——快速排序 快速排序应该算是在面试笔试中最常用的算法了,各位面试官都非常喜欢。排序效率在同为O(N*logN)的几种排序方...
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
2 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
Repo: Wie man Teamkollegen wiederbelebt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Abenteuer: Wie man riesige Samen bekommt
1 Monate vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

CLIP-BEVFormer: Überwacht explizit die BEVFormer-Struktur, um die Leistung der Long-Tail-Erkennung zu verbessern CLIP-BEVFormer: Überwacht explizit die BEVFormer-Struktur, um die Leistung der Long-Tail-Erkennung zu verbessern Mar 26, 2024 pm 12:41 PM

Oben geschrieben und das persönliche Verständnis des Autors: Derzeit spielt das Wahrnehmungsmodul im gesamten autonomen Fahrsystem eine entscheidende Rolle Das Steuermodul im autonomen Fahrsystem trifft zeitnahe und korrekte Urteile und Verhaltensentscheidungen. Derzeit sind Autos mit autonomen Fahrfunktionen in der Regel mit einer Vielzahl von Dateninformationssensoren ausgestattet, darunter Rundumsichtkamerasensoren, Lidar-Sensoren und Millimeterwellenradarsensoren, um Informationen in verschiedenen Modalitäten zu sammeln und so genaue Wahrnehmungsaufgaben zu erfüllen. Der auf reinem Sehen basierende BEV-Wahrnehmungsalgorithmus wird von der Industrie aufgrund seiner geringen Hardwarekosten und einfachen Bereitstellung bevorzugt, und seine Ausgabeergebnisse können problemlos auf verschiedene nachgelagerte Aufgaben angewendet werden.

Implementierung von Algorithmen für maschinelles Lernen in C++: Häufige Herausforderungen und Lösungen Implementierung von Algorithmen für maschinelles Lernen in C++: Häufige Herausforderungen und Lösungen Jun 03, 2024 pm 01:25 PM

Zu den häufigsten Herausforderungen, mit denen Algorithmen für maschinelles Lernen in C++ konfrontiert sind, gehören Speicherverwaltung, Multithreading, Leistungsoptimierung und Wartbarkeit. Zu den Lösungen gehören die Verwendung intelligenter Zeiger, moderner Threading-Bibliotheken, SIMD-Anweisungen und Bibliotheken von Drittanbietern sowie die Einhaltung von Codierungsstilrichtlinien und die Verwendung von Automatisierungstools. Praktische Fälle zeigen, wie man die Eigen-Bibliothek nutzt, um lineare Regressionsalgorithmen zu implementieren, den Speicher effektiv zu verwalten und leistungsstarke Matrixoperationen zu nutzen.

Entdecken Sie die zugrunde liegenden Prinzipien und die Algorithmusauswahl der C++-Sortierfunktion Entdecken Sie die zugrunde liegenden Prinzipien und die Algorithmusauswahl der C++-Sortierfunktion Apr 02, 2024 pm 05:36 PM

Die unterste Ebene der C++-Sortierfunktion verwendet die Zusammenführungssortierung, ihre Komplexität beträgt O(nlogn) und bietet verschiedene Auswahlmöglichkeiten für Sortieralgorithmen, einschließlich schneller Sortierung, Heap-Sortierung und stabiler Sortierung.

Üben und denken Sie an die multimodale große Modellplattform DataCanvas von Jiuzhang Yunji Üben und denken Sie an die multimodale große Modellplattform DataCanvas von Jiuzhang Yunji Oct 20, 2023 am 08:45 AM

1. Die historische Entwicklung multimodaler Großmodelle zeigt den ersten Workshop zur künstlichen Intelligenz, der 1956 am Dartmouth College in den Vereinigten Staaten stattfand Pioniere der symbolischen Logik (außer dem Neurobiologen Peter Milner in der Mitte der ersten Reihe). Diese symbolische Logiktheorie konnte jedoch lange Zeit nicht verwirklicht werden und leitete in den 1980er und 1990er Jahren sogar den ersten KI-Winter ein. Erst mit der kürzlich erfolgten Implementierung großer Sprachmodelle haben wir entdeckt, dass neuronale Netze dieses logische Denken tatsächlich tragen. Die Arbeit des Neurobiologen Peter Milner inspirierte die spätere Entwicklung künstlicher neuronaler Netze, und aus diesem Grund wurde er zur Teilnahme eingeladen in diesem Projekt.

Verbesserter Erkennungsalgorithmus: zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern Verbesserter Erkennungsalgorithmus: zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern Jun 06, 2024 pm 12:33 PM

01Ausblicksübersicht Derzeit ist es schwierig, ein angemessenes Gleichgewicht zwischen Detektionseffizienz und Detektionsergebnissen zu erreichen. Wir haben einen verbesserten YOLOv5-Algorithmus zur Zielerkennung in hochauflösenden optischen Fernerkundungsbildern entwickelt, der mehrschichtige Merkmalspyramiden, Multierkennungskopfstrategien und hybride Aufmerksamkeitsmodule verwendet, um die Wirkung des Zielerkennungsnetzwerks in optischen Fernerkundungsbildern zu verbessern. Laut SIMD-Datensatz ist der mAP des neuen Algorithmus 2,2 % besser als YOLOv5 und 8,48 % besser als YOLOX, wodurch ein besseres Gleichgewicht zwischen Erkennungsergebnissen und Geschwindigkeit erreicht wird. 02 Hintergrund und Motivation Mit der rasanten Entwicklung der Fernerkundungstechnologie wurden hochauflösende optische Fernerkundungsbilder verwendet, um viele Objekte auf der Erdoberfläche zu beschreiben, darunter Flugzeuge, Autos, Gebäude usw. Objekterkennung bei der Interpretation von Fernerkundungsbildern

Kann künstliche Intelligenz Kriminalität vorhersagen? Entdecken Sie die Möglichkeiten von CrimeGPT Kann künstliche Intelligenz Kriminalität vorhersagen? Entdecken Sie die Möglichkeiten von CrimeGPT Mar 22, 2024 pm 10:10 PM

Die Konvergenz von künstlicher Intelligenz (KI) und Strafverfolgung eröffnet neue Möglichkeiten zur Kriminalprävention und -aufdeckung. Die Vorhersagefähigkeiten künstlicher Intelligenz werden häufig in Systemen wie CrimeGPT (Crime Prediction Technology) genutzt, um kriminelle Aktivitäten vorherzusagen. Dieser Artikel untersucht das Potenzial künstlicher Intelligenz bei der Kriminalitätsvorhersage, ihre aktuellen Anwendungen, die Herausforderungen, denen sie gegenübersteht, und die möglichen ethischen Auswirkungen der Technologie. Künstliche Intelligenz und Kriminalitätsvorhersage: Die Grundlagen CrimeGPT verwendet Algorithmen des maschinellen Lernens, um große Datensätze zu analysieren und Muster zu identifizieren, die vorhersagen können, wo und wann Straftaten wahrscheinlich passieren. Zu diesen Datensätzen gehören historische Kriminalstatistiken, demografische Informationen, Wirtschaftsindikatoren, Wettermuster und mehr. Durch die Identifizierung von Trends, die menschliche Analysten möglicherweise übersehen, kann künstliche Intelligenz Strafverfolgungsbehörden stärken

Anwendung von Algorithmen beim Aufbau einer 58-Porträt-Plattform Anwendung von Algorithmen beim Aufbau einer 58-Porträt-Plattform May 09, 2024 am 09:01 AM

1. Hintergrund des Baus der 58-Portrait-Plattform Zunächst möchte ich Ihnen den Hintergrund des Baus der 58-Portrait-Plattform mitteilen. 1. Das traditionelle Denken der traditionellen Profiling-Plattform reicht nicht mehr aus. Der Aufbau einer Benutzer-Profiling-Plattform basiert auf Data-Warehouse-Modellierungsfunktionen, um Daten aus mehreren Geschäftsbereichen zu integrieren, um genaue Benutzerporträts zu erstellen Und schließlich muss es über Datenplattformfunktionen verfügen, um Benutzerprofildaten effizient zu speichern, abzufragen und zu teilen sowie Profildienste bereitzustellen. Der Hauptunterschied zwischen einer selbst erstellten Business-Profiling-Plattform und einer Middle-Office-Profiling-Plattform besteht darin, dass die selbst erstellte Profiling-Plattform einen einzelnen Geschäftsbereich bedient und bei Bedarf angepasst werden kann. Die Mid-Office-Plattform bedient mehrere Geschäftsbereiche und ist komplex Modellierung und bietet allgemeinere Funktionen. 2.58 Benutzerporträts vom Hintergrund der Porträtkonstruktion im Mittelbahnsteig 58

Analyse des PHP-Algorithmus: effiziente Methode zum Auffinden fehlender Zahlen in einem Array Analyse des PHP-Algorithmus: effiziente Methode zum Auffinden fehlender Zahlen in einem Array Mar 02, 2024 am 08:39 AM

PHP-Algorithmusanalyse: eine effiziente Methode zum Auffinden fehlender Zahlen in einem Array. Bei der Entwicklung von PHP-Anwendungen stoßen wir häufig auf Situationen, in denen wir fehlende Zahlen in einem Array finden müssen. Diese Situation kommt in der Datenverarbeitung und im Algorithmusdesign sehr häufig vor. Daher müssen wir effiziente Suchalgorithmen beherrschen, um dieses Problem zu lösen. In diesem Artikel wird eine effiziente Methode zum Auffinden fehlender Zahlen in einem Array vorgestellt und spezifische PHP-Codebeispiele angehängt. Problembeschreibung Angenommen, wir haben ein Array mit Ganzzahlen zwischen 1 und 100, aber eine Zahl fehlt. Wir müssen ein entwerfen

See all articles