小猿圈算法之快排

算法在面試的時候常常會遇到,是不可避免的,只要你面試,確定得會算法,冒泡、二分這些基礎的算法估計實習的時候纔會被面試到,稍微高級一點的算法快排,通常是畢業生、或者換工做的朋友都會被問到,小猿圈詳細描述一下快排的思想和快排的算法,你們能夠看一下。面試

//排序--快速排序法算法

#include<stdio.h>數組

#include<stdlib.h>ui

#include<string.h>code

#include<time.h>視頻

/*排序

快速排序遞歸

它的基本思想是:經過一趟排序將要排序的數據分割成獨立的兩部分,get

其中一部分的全部數據都比另一部分的全部數據都要小string

,而後再按此方法對這兩部分數據分別進行快速排序,

整個排序過程能夠遞歸進行,

以此達到整個數據變成有序序列。

快速排序:

第一步:在數據集之中,選擇一個元素做爲"基準"(pivot)

第二步:全部小於"基準"的元素,都移到"基準"的左邊;全部大於"基準"的元素,都移到"基準"的右邊

第三步:對"基準"左邊和右邊的兩個子集,不斷重複第一步和第二步,直到全部子集只剩下一個元素爲止

*/

//位置調換

void MySwap(int *arr,int a,int b){

    int temp = arr[a];

    arr[a] = arr[b];

    arr[b] = temp;

}

//一輪快速排序 single

int SingleSort(int *arr, int low, int high){

    //獲取樞軸

    int pv = arr[low];

    while (low < high){

        //high向左移動

        while (low<high&&arr[high] >= pv){

            high--;

        }

        //此時 high下標的元素的值不大於樞軸  能夠調換位置

        MySwap(arr, low, high);

        //注意 此時樞軸的位置在high上  high的值就是Pv

        //low向右移動

        while (low<high&&arr[low]< pv){

            low++;

        }

        //此時 low下標的元素的值大於樞軸  能夠調換位置

        MySwap(arr, low, high);

        //注意 此時樞軸的位置在low上  low的值就是Pv

    }

    //返回最終pv所在的位置  此時一定 low==high

    return low;

}

//快速排序

void QuickSort(int *arr, int low, int high){

    if (low >= high)

    {

        return;

    }

    //排序一輪

    int pivot = SingleSort(arr, low, high);

    //排序產生的左數組

    QuickSort(arr, low, pivot - 1);

    //排序產生的右數組

    QuickSort(arr, pivot + 1, high);

}

//打印數組

void Print(int * arr, int num){

    if (arr == NULL)

    {

        printf("傳入參數不能夠爲空!\n");

        return;

    }

    int i = 0;

    for (int i = 0; i < num; i++)

    {

        printf("%5d", *(arr + i));

    }

    printf("\n");

}

void Test(){

    int i = 0;

    int arr[10] = { 0 };

    //定義時間類型變量

    time_t ts;

    //生成隨機數種子

    srand((unsigned int)time(&ts));

    for (i = 0; i < 10; i++)

    {

        arr[i] = (int)(rand() % 100);

    }

    //打印數組

    printf("\n原始數據----\n");

    Print(arr, 10);

    //快速排序

    printf("快速排序以後的數據\n");

    QuickSort(arr, 0,9);

    Print(arr, 10);

}

void main(){

    Test();

    system("pause");

}

你們學會了嗎?首先必定要把快排的思想理解透徹,只有思想透徹了,代碼纔會很順手敲出來,要不雖然代碼懂了,估計過兩天就忘了,因此思想很重要,想要了解其餘算法,能夠去小猿圈學一下,全都是免費的視頻資料,但願你們真的能學到!

相關文章
相關標籤/搜索