国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Inhaltsverzeichnis
快速排序
堆排序
插入排序
選擇排序
按層打印二叉樹
后序遍歷二叉樹
單鏈表相關(guān)(待完善)
數(shù)組去重
求字符數(shù)組全排列
二分查找
字符串反轉(zhuǎn)
字符串復(fù)制
Heim Backend-Entwicklung PHP-Tutorial Hinweise zu g?ngigen Grundalgorithmen

Hinweise zu g?ngigen Grundalgorithmen

Aug 08, 2016 am 09:29 AM
arr gt int lt void

一些常見的基礎(chǔ)算法(未完待續(xù))

快速排序

<code>int partition(int left,int right,int arr[])
{
    int i = left;
    int j = right;
    int value = arr[left];
    while (j > i)
    {
        //從右邊j開始找到一個比value小的值
        while (j > i && arr[j] >= value)
            j--;
        if (j > i)
        {
            arr[i] = arr[j];
            i++;
        }

        //從左邊i開始找到一個比value大的值
        while (j > i && arr[i] <= value)
            i++;
        if (j > i)
        {
            arr[j] = arr[i];
            j--;
        }
    }
    //i=j時代表所有比value大的值都到了右邊,比value小的到了左邊
    arr[i] = value;
    return i;
}
</code>
<code>void quickSort(int arr[], int left, int right)
{
    if (left < right)
    {
        int i = partition(left, right,arr);
        quickSort(arr, left, i - 1);
        quickSort(arr, i + 1, right);
    }
}

void quickSortTest()
{
    int arr[10] = { 1, 34, 5, 6, 8, 12, 5, 9, 345, 0 };
    int n = 10;
    cout << "==================quickSort====================" << endl;
    for (int i = 0; i <= n - 1; i++)
    {
        cout << arr[i] << "\t";
    }
    cout << endl;

    quickSort(arr, 0, 9);

    for (int i = 0; i <= n - 1; i++)
    {
        cout << arr[i] << "\t";
    }
    cout << endl;
}
</code>

堆排序

<code>include <stdio.h>
//假設(shè)第i個節(jié)點的左右子樹已經(jīng)是最大堆,加入第
//i個節(jié)點后重新調(diào)整堆
void heapAdjust(int arr[], int i, int size)
{
    int l = 2*i;
    int r = l+1;
    int max = i;
    if(i<=(size/2)){  //非葉子節(jié)點才需調(diào)整
        if(l<=size&&arr[l]>arr[max])
        max = l;
    if(r<=size&&arr[r]>arr[max])
        max = r;
    if(max!=i){
        arr[max] ^= arr[i];
        arr[i] ^= arr[max];
        arr[max] ^= arr[i];
        //int temp = arr[i];
        //arr[i] = arr[max];
        //arr[max] = temp;
        heapAdjust(arr, max, size);
    }
    }
}
//建立最大堆
void buildHeap(int arr[], int heapsize)
{
    int middle = heapsize/2;
    for(int i=middle;i>=1;i--)
        heapAdjust(arr,i,heapsize);
}
//堆排序
void heapSort(int arr[], int size)
{
    buildHeap(arr,size);
    for(int i=size;i>=2;i--){
        //arr[i] ^= arr[1];
    //arr[1] ^= arr[i];
    //arr[i] ^= arr[1];
    arr[i] += arr[1];
    arr[1] = arr[i]-arr[1];
    arr[i] = arr[i]-arr[1];
    heapAdjust(arr,1,i-1);
    }
}
void printArr(int arr[], int n)
{
    int i = -1;
    while(i++<n-1)
        printf("%d\t",arr[i]);
    printf("\n");
}

int main(int argc, char **argv)
{
    int arr[9] = {0,1,3,45,2,56,345,6,778};
    printArr(arr,9);
    heapSort(arr,8);
    printArr(arr,9);
    return 0;
}
</code>

插入排序

<code>void insertSort()
{
    int arr[10] = { 1, 34, 5, 6, 8, 12, 5, 9, 345, 0 };
    int n = 10;
    cout << "==================insertSort====================" << endl;
    for (int i = 0; i <= n - 1; i++)
    {
        cout << arr[i] << "\t";
    }
    cout << endl;

    for (int i = 1; i <= n - 1; i++)
    {
        int j;
        int temp = arr[i];
        //內(nèi)循環(huán)將已排序的且比arr[i]大的往前挪
        for (j = i - 1; j >= 0 && arr[j] > temp; j--)
        {
            arr[j + 1] = arr[j];
        }
        //最后將最初的arr[i]值放到空出的位置
        arr[j + 1] = temp;
    }

    for (int i = 0; i <= n - 1; i++)
    {
        cout << arr[i] << "\t";
    }
}
</code>

選擇排序

<code>void selectSort()
{
    int arr[10] = { 1, 34, 5, 6, 8, 12, 5, 9, 345, 0 };
    int n = 10;
    cout << "==================selectSort====================" << endl;
    for (int i = 0; i <= n - 1; i++)
    {
        cout << arr[i] << "\t";
    }
    cout << endl;

    for (int i = 0; i <= n - 2; i++)
    {
        int key = i;
        //內(nèi)循環(huán)找到第i大的值的下標(biāo)
        for (int j = i + 1; j <= n - 1; j++)
        {
            if (arr[j] < arr[key])
            {
                key = j;
            }
        }
        int value = arr[i];
        arr[i] = arr[key];
        arr[key] = value;
    }

    for (int i = 0; i <= n - 1; i++)
    {
        cout << arr[i] << "\t";
    }
}
</code>

按層打印二叉樹

<code>#include <iostream>
Queue q = new Queue();
void printBinaryTree(Node *n)
{
    q.put(n);
    Node *next = NULL;
    while(NULL!=(next=q.get()))
    {
        if(next->val!=NULL)
        std::cout<<next->value;
        if(next->left!=NULL)
            q.put(next->left);
        if(next->right!=NULL)
            q.put(next->right);
    }
}
</code>

后序遍歷二叉樹

<code>void postorder(Node root)
{
    if(root == NULL)
        return;
    postorder(root->left);
    postorder(root->right);
    visit(root);
}

void postOrder(Node root)
{
    Stack stack = new Stack();
    Node tmp = root;

    while(tmp!=NULL || !stack.empty())
    {
        if(tmp!=NULL)
        {
            stack.push(tmp,"left");
            tmp = tmp->left;
        }
        else
        {
            s = stack.pop();
            tmp = s.tmp;
            tag = s.tag;
            if(tag=="right")
            {
                visit(tmp);
                tmp = NULL;
            }
            else
            {
                stack.push(tmp,"right");
                tmp = tmp->right;
            }
        }
    }
}
</code>

單鏈表相關(guān)(待完善)

<code>//單鏈表反轉(zhuǎn)
void reverse1(node **head)
{
    node *temp;
    node *op;
    temp = *head;
    op = temp->next;
    (*head)->next = NULL;
    while(op)
    {
        //保存原始o(jì)p的下一個
        temp = op->next;
        //拆開鏈表
        op->next = *head;
        //移動head
        *head = op;
        //移動op
        op = temp;
    }
}

void reverse2(node **head)
{
    //使用棧先進(jìn)后出
}

//反向打印單鏈表
void reversePrint(node *head)
{
    if (head->next != NULL)
    {
        reversePrint(head->next);
        printf("%d\n",head->next->data);
    }
}
</code>

數(shù)組去重

<code>function cleanArray(arr){
    var hash = {};
    var len = arr.length;
    for (var i = 0; i < len; i++) {
        if(undefined == hash[arr[i]])
            hash[arr[i]] = arr[i];
    };
    return hash;
}
//testcase
var arr = [1,2,3,'1','3',45,123,2,3,45,9,9,"test","fadsa","test"];
console.log(cleanArray(arr));
//output Object {1: 1, 2: 2, 3: 3, 9: 9, 45: 45, 123: 123, test: "test", fadsa: "fadsa"}
</code>

求字符數(shù)組全排列

<code>function permute(strpre, str)
{
  if(str.length==0){
    console.log(strpre);
  }else{
        var l = str.length;
    for(var i=0;i<l;i++)
      permute(strpre+str[i], str.slice(0,i)+str.slice(i+1,l));
  }
}
    permute("", "abcd");
</code>

二分查找

<code>int binarySearch(int arr[], int l, int r, int k)
{
    while(l<=r){
        int m = l+(r-l)/2;
        if(arr[m]==k) return m;
        if(arr[m]>k) r = m+1;
        else l = m-1;
    }
    return -1;
}
int binarySearch1(int arr[], int l, int r, int k)
{
    if(r>=l){
        int m = l+(r-l)/2;
        if(arr[m]==k) return m;
        if(arr[m]>k) binarySearch1(arr, l, m-1, k);
        else binarySearch1(arr, m+1, r, k);    
    }   
    return -1;
}
</code>

字符串反轉(zhuǎn)

<code>#include <stdio.h>
#include <string.h>
void reverse1(char *s)
{
    char *p1,*p2;
    char c;
    p1 = s;
    p2 = s+strlen(s)-1;
    while(p1<p2){
        c = *p1;
    *p1 = *p2;
    *p2 = c;
    p1++;
    p2--;
    }
}
void reverse2(char *s)
{
    char *p1,*p2;
    p1 = s;
    p2 = s+strlen(s)-1;
    while(p1<p2){      //此處用異或交換一定p1!=p2
    *p2 ^= *p1;
    *p1 ^= *p2;
    *p2 ^= *p1;
    p1++;
    p2--;
    }
}
void reverse3(char *s)
{
    char *p1,*p2;
    p1 = s;
    p2 = s+strlen(s)-1;
    while(p1<p2){      
    *p1 += *p2;
    *p2 = *p1-*p2;
    *p1 = *p1-*p2;
    p1++;
    p2--;
    }
}
void reverse4(char *s, int tail)
{
    if(tail>1){
        char c = *s;
        *s = *(s+tail-1);
        *(s+tail-1) = c;
        reverse4(s+1,tail-2);
    }
}
</code>

字符串復(fù)制

<code>void copy(char *s, char *d)
{
    while(*s!='\0'){
        *d++ = *s++;
    }
    *d = '\0';
}
</code>

以上就介紹了常見基礎(chǔ)算法筆記,包括了方面的內(nèi)容,希望對PHP教程有興趣的朋友有所幫助。

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

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

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.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

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)

Hei?e Themen

PHP-Tutorial
1502
276
Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Was sind die Unterschiede zwischen Huawei GT3 Pro und GT4? Dec 29, 2023 pm 02:27 PM

Viele Benutzer werden sich bei der Auswahl von Smartwatches für die Marke Huawei entscheiden. Viele Benutzer sind neugierig auf den Unterschied zwischen Huawei GT3pro und GT4. Was sind die Unterschiede zwischen Huawei GT3pro und GT4? 1. Aussehen GT4: 46 mm und 41 mm, das Material ist Glasspiegel + Edelstahlgeh?use + hochaufl?sende Faserrückschale. GT3pro: 46,6 mm und 42,9 mm, das Material ist Saphirglas + Titangeh?use/Keramikgeh?use + Keramikrückschale 2. Gesundes GT4: Mit dem neuesten Huawei Truseen5.5+-Algorithmus werden die Ergebnisse genauer. GT3pro: EKG-Elektrokardiogramm sowie Blutgef?? und Sicherheit hinzugefügt

Was bedeutet ?void' in Java? Was bedeutet ?void' in Java? Mar 01, 2023 pm 07:19 PM

In Java bedeutet void ?leer“, also ?gibt nichts zurück“. Wenn die Methode deklariert wird, bedeutet dies, dass die Methode keinen Rückgabewert hat. ?void entspricht einer Wrapper-Klasse ?java.lang.Void“. Die Void-Klasse wird mit final ge?ndert und ist eine nicht instanziierbare Platzhalterklasse, die zum Speichern eines Verweises auf das Klassenobjekt verwendet wird, das das Java-Schlüsselwort void darstellt.

Fix: Snipping-Tool funktioniert unter Windows 11 nicht Fix: Snipping-Tool funktioniert unter Windows 11 nicht Aug 24, 2023 am 09:48 AM

Warum das Snipping-Tool unter Windows 11 nicht funktioniert Das Verst?ndnis der Grundursache des Problems kann dabei helfen, die richtige L?sung zu finden. Hier sind die h?ufigsten Gründe, warum das Snipping Tool m?glicherweise nicht ordnungsgem?? funktioniert: Focus Assistant ist aktiviert: Dies verhindert, dass das Snipping Tool ge?ffnet wird. Besch?digte Anwendung: Wenn das Snipping-Tool beim Start abstürzt, ist es m?glicherweise besch?digt. Veraltete Grafiktreiber: Inkompatible Treiber k?nnen das Snipping-Tool beeintr?chtigen. St?rungen durch andere Anwendungen: Andere laufende Anwendungen k?nnen mit dem Snipping Tool in Konflikt geraten. Das Zertifikat ist abgelaufen: Ein Fehler w?hrend des Upgrade-Vorgangs kann zu diesem Problem führen. Diese einfache L?sung ist für die meisten Benutzer geeignet und erfordert keine besonderen technischen Kenntnisse. 1. Aktualisieren Sie Windows- und Microsoft Store-Apps

Detaillierte Erl?uterung der Methode zum Konvertieren des Int-Typs in Bytes in PHP Detaillierte Erl?uterung der Methode zum Konvertieren des Int-Typs in Bytes in PHP Mar 06, 2024 pm 06:18 PM

Ausführliche Erl?uterung der Methode zum Konvertieren des Int-Typs in Byte in PHP. In PHP müssen wir h?ufig den Integer-Typ (int) in den Byte-Typ (Byte) konvertieren, beispielsweise wenn es um Netzwerkdatenübertragung, Dateiverarbeitung oder Verschlüsselungsalgorithmen geht . In diesem Artikel wird detailliert beschrieben, wie der Typ int in den Typ byte konvertiert wird, und es werden spezifische Codebeispiele bereitgestellt. 1. Die Beziehung zwischen int-Typ und Byte Im Computerbereich stellt der grundlegende Datentyp int eine Ganzzahl dar, w?hrend Byte (Byte) eine Computerspeichereinheit ist, normalerweise 8-Bit-Bin?rdaten

Was ist der Wertebereich von int32? Was ist der Wertebereich von int32? Aug 11, 2023 pm 02:53 PM

Der Wertebereich von int32 reicht von -2 bis 31. Potenz bis 2 bis 31. Potenz minus 1, also -2147483648 bis 2147483647. int32 ist ein vorzeichenbehafteter Ganzzahltyp, was bedeutet, dass er positive Zahlen, negative Zahlen und Nullen darstellen kann. Er verwendet 1 Bit zur Darstellung des Vorzeichenbits und die restlichen 31 Bits werden zur Darstellung des numerischen Werts verwendet. Da ein Bit zur Darstellung des Vorzeichenbits verwendet wird, betr?gt die effektive Anzahl der int32-Bits 31.

C++-Programm zum Konvertieren von Variablen vom Typ Double in den Typ int C++-Programm zum Konvertieren von Variablen vom Typ Double in den Typ int Aug 25, 2023 pm 08:25 PM

In C++ k?nnen Variablen vom Typ int nur positive oder negative Ganzzahlwerte enthalten; sie k?nnen keine Dezimalwerte enthalten. Hierfür stehen Float- und Double-Werte zur Verfügung. Der Datentyp double wurde erstellt, um Dezimalzahlen mit bis zu sieben Nachkommastellen zu speichern. Die Konvertierung einer Ganzzahl in einen Double-Datentyp kann automatisch vom Compiler durchgeführt werden (sogenannte ?implizite“ Konvertierung) oder sie kann vom Programmierer explizit vom Compiler angefordert werden (sogenannte ?explizite“ Konvertierung). In den folgenden Abschnitten werden wir verschiedene Konvertierungsmethoden behandeln. Implizite Konvertierungen Der Compiler führt implizite Typkonvertierungen automatisch durch. Um dies zu erreichen, sind zwei Variablen erforderlich – eine vom Typ Gleitkomma und die andere vom Typ Ganzzahl. Wenn wir einer Ganzzahlvariablen einfach einen Gleitkommawert oder eine Variable zuweisen, kümmert sich der Compiler um alle anderen Dinge

Die Funktion des Schlüsselworts void in der C-Sprache Die Funktion des Schlüsselworts void in der C-Sprache Feb 19, 2024 pm 11:33 PM

void ist in C ein spezielles Schlüsselwort, das zur Darstellung eines leeren Typs verwendet wird, also Daten ohne einen bestimmten Typ. In der C-Sprache wird void normalerweise in den folgenden drei Aspekten verwendet. Der Rückgabetyp der Funktion ist void. In der Sprache C k?nnen Funktionen unterschiedliche Rückgabetypen haben, z. B. int, float, char usw. Wenn die Funktion jedoch keinen Wert zurückgibt, kann der Rückgabetyp auf void gesetzt werden. Dies bedeutet, dass die Funktion nach Ausführung keinen bestimmten Wert zurückgibt. Zum Beispiel: voidhelloWorld()

Welche Bedeutung hat die Verwendung des Rückgabewerts vom Typ ?void' in PHP? Welche Bedeutung hat die Verwendung des Rückgabewerts vom Typ ?void' in PHP? Apr 10, 2024 pm 09:21 PM

In PHP bedeutet der Rückgabewert vom Typ ?void“, dass die Funktion keinen Wert zurückgibt, und wird normalerweise für Vorg?nge wie das Aktualisieren von Datens?tzen verwendet, die keinen Rückgabewert erfordern. Verwenden Sie das Schlüsselwort void, wenn Sie eine void-Funktion deklarieren. Beim Aufruf einer void-Funktion darf das Ergebnis keiner Variablen zugewiesen werden. Praktischer Fall: Der Rückgabewert vom Typ ?void“ kann zum Aktualisieren von Datenbankdatens?tzen verwendet werden, ohne dass Informationen zurückgegeben werden.

See all articles