最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java快速排序和選擇排序?qū)崿F(xiàn)實(shí)例解析

 更新時(shí)間:2023年11月16日 10:44:16   作者:胡子拉碴的沙灘褲  
這篇文章主要為大家介紹了java快速排序和選擇排序?qū)崿F(xiàn)實(shí)例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

一、快速排序(Quick Sort)

快速排序采用分治法。首先從數(shù)列中挑出一個(gè)元素作為中間值。依次遍歷數(shù)據(jù),所有比中間值小的元素放在左邊,所有比中間值大的元素放在右邊。然后按此方法對(duì)左右兩個(gè)子序列分別進(jìn)行遞歸操作,直到所有數(shù)據(jù)有序。最理想的情況是,每次劃分所選擇的中間數(shù)恰好將當(dāng)前序列幾乎等分(均勻排布),整個(gè)算法的時(shí)間復(fù)雜度為O(n logn)

最壞的情況是,每次所選的中間數(shù)是當(dāng)前序列中的最大或最小元素(正序和逆序都是最壞),整個(gè)排序算法的時(shí)間復(fù)雜度為O(n²)。

平均時(shí)間復(fù)雜度為O(n logn),空間復(fù)雜度為O(logn),是一種不穩(wěn)定的排序算法。

附算法實(shí)現(xiàn)源碼:

//快速排序
template <class T>
int Partition(T data[],int left,int right)
{
    T pivot=data[left];
    while(left<right)
    {
        while(left<right&&data[right]>pivot)
            right--;
        data[left]=data[right];
        while(left<right&&data[left]<=pivot)
            left++;
        data[right]=data[left];
    }
    data[left]=pivot;
    return left;
}
template <class T>
void QuickSort(T data[],int left,int right)
{
if(left<right)
{
    int p=Partition(data,left,right);
    QuickSort(data,left,p-1);
    QuickSort(data,p+1,right);
}
}

二、、選擇排序(Selection Sort)

遍歷所有數(shù)據(jù),先在數(shù)據(jù)中找出最大或最小的元素,放到序列的起始;然后再?gòu)挠嘞碌臄?shù)據(jù)中繼續(xù)尋找最大或最小的元素,依次放到序列中直到所有數(shù)據(jù)有序。原始數(shù)據(jù)的排列順序不會(huì)影響程序耗費(fèi)時(shí)間O(n²),相對(duì)費(fèi)時(shí),不適合大量數(shù)據(jù)排序。

平均時(shí)間復(fù)雜度為O(n²),空間復(fù)雜度為O(1),是一種不穩(wěn)定的排序算法。

附算法實(shí)現(xiàn)源碼:

//選擇排序
template <class T>
void SelectionSort(T data[],int n)
{
    for(int i=1;i<n;i++)
    {
        int k=i-1;
        for(int j=i;j<n;j++)
        {
            if(data[j]<data[k])
            {
                k=j;
            }
        }
        if(k!=i-1)
        {
            T t=data[k];
            data[k]=data[i-1];
            data[i-1]=t;
        }
    }
}

三、插入排序(Insertion Sort)

將前i個(gè)(初始為1)數(shù)據(jù)假定為有序序列,依次遍歷數(shù)據(jù),將當(dāng)前數(shù)據(jù)插入到前述有序序列的適當(dāng)位置,形成前i+1個(gè)有序序列,依次遍歷完所有數(shù)據(jù),直至序列中所有數(shù)據(jù)有序。數(shù)據(jù)是反序時(shí),耗費(fèi)時(shí)間最長(zhǎng)O(n²);數(shù)據(jù)是正序時(shí),耗費(fèi)時(shí)間最短O(píng)(n)。適用于部分?jǐn)?shù)據(jù)已經(jīng)排好的少量數(shù)據(jù)排序。

平均時(shí)間復(fù)雜度為O(n²),空間復(fù)雜度為O(1),是一種穩(wěn)定的排序算法。

附算法實(shí)現(xiàn)源碼(直接插入+折半插入):

//直接插入排序
template <class T>
void InsertionSort(T Data[],int n)
{
    int p,i;
    for(p=1;p<n;p++)
    {
        T temp=Data[p];
        i=p-1;
        while(i>=0&&Data[i]>temp)
        {
            Data[i+1]=Data[i];
            i--;
        }
        Data[i+1]=temp;
    }
}
//折半插入排序
template <class T>
void BinaryInsertionSort(T Data[],int n)
{
    int left,mid,right,p;
    for(p=1;p<n;p++)
    {
        T temp=Data[p];
        left =0;
        right=n-1;
        while(left<=right)
        {
            mid=(left+right)/2;
            if(Data[mid]>temp)
                right=mid-1;
            else
                left=mid+1;
        }
        for(int i=p-1;i>=left;i--)
            Data[i+1]=Data[i];
        Data[left]=temp;
    }
}

四、希爾排序(Shell Sort)

希爾排序也稱(chēng)遞減增量排序,是對(duì)插入排序的改進(jìn),以犧牲穩(wěn)定性的方法提高效率?;舅悸肥窍葘⒄麄€(gè)數(shù)據(jù)序列分割成若干子序列分別進(jìn)行直接插入排序,待整個(gè)序列中的記錄基本有序時(shí),再對(duì)全部數(shù)據(jù)進(jìn)行依次直接插入排序,直至所有數(shù)據(jù)有序。希爾排序算法的性能與所選取的分組長(zhǎng)度序列有很大關(guān)系,復(fù)雜度下界為O(n log²n),在中等規(guī)模的數(shù)據(jù)中表現(xiàn)良好。

平均時(shí)間復(fù)雜度為O(n^3/2),空間復(fù)雜度為O(1),是一種不穩(wěn)定的排序算法。

附算法實(shí)現(xiàn)源碼:

//希爾排序
template <class T>
void ShellSort(T Data[],int n)
{
    int d=n/2;
    while(d>=1)
    {
        for(int k=0;k<d;k++)
        {
            for(int i=k+d;i<n;i+=d)
            {
                T temp=Data[i];
                int j=i-d;
                while(j>=k&&Data[j]>temp)
                {
                    Data[j+d]=Data[j];
                    j-=d;
                }
                Data[j+d]=temp;
            }
        }
        d=d/2;
    }
}

以上就是java快速排序和選擇排序?qū)崿F(xiàn)實(shí)例解析的詳細(xì)內(nèi)容,更多關(guān)于java快速排序選擇排序的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spring Boot 集成Shiro的多realm實(shí)現(xiàn)以及shiro基本入門(mén)教程

    Spring Boot 集成Shiro的多realm實(shí)現(xiàn)以及shiro基本入門(mén)教程

    這篇文章主要介紹了Spring Boot 集成Shiro的多realm實(shí)現(xiàn)以及shiro基本入門(mén),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 解決springboot 獲取form-data里的file文件的問(wèn)題

    解決springboot 獲取form-data里的file文件的問(wèn)題

    這篇文章主要介紹了解決springboot 獲取form-data里的file文件的問(wèn)題的相關(guān)資料,這里提供了詳細(xì)的解決步驟,需要的朋友可以參考下
    2017-07-07
  • Spring Boot 應(yīng)用測(cè)試策略與實(shí)戰(zhàn)指南(最新整理)

    Spring Boot 應(yīng)用測(cè)試策略與實(shí)戰(zhàn)指南(最新整理)

    本文介紹了SpringBoot應(yīng)用的測(cè)試策略,強(qiáng)調(diào)了測(cè)試的重要性(確保代碼質(zhì)量、提高開(kāi)發(fā)效率、促進(jìn)團(tuán)隊(duì)協(xié)作和支持持續(xù)集成與部署),并詳細(xì)說(shuō)明了不同類(lèi)型的測(cè)試(單元測(cè)試、集成測(cè)試、端到端測(cè)試和性能測(cè)試)及其實(shí)現(xiàn)方法,感興趣的朋友一起看看吧
    2026-04-04
  • Java 遍歷list和map的方法

    Java 遍歷list和map的方法

    這篇文章主要介紹了Java 遍歷list和map的方法,幫助大家更好的理解和使用Java,感興趣的朋友可以了解下
    2020-12-12
  • 淺談spring注解之@profile

    淺談spring注解之@profile

    這篇文章主要介紹了淺談spring注解之@profile,@profile通過(guò)配置來(lái)改變參數(shù),這里整理的詳細(xì)的用法,有興趣的可以了解一下
    2017-10-10
  • SpringBoot自定義注解及AOP的開(kāi)發(fā)和使用詳解

    SpringBoot自定義注解及AOP的開(kāi)發(fā)和使用詳解

    在公司項(xiàng)目中,如果需要做一些公共的功能,如日志等,最好的方式是使用自定義注解,自定義注解可以實(shí)現(xiàn)我們對(duì)想要添加日志的方法上添加,這篇文章基于日志功能來(lái)講講自定義注解應(yīng)該如何開(kāi)發(fā)和使用,需要的朋友可以參考下
    2023-08-08
  • 關(guān)于springboot打包目錄全解析

    關(guān)于springboot打包目錄全解析

    這篇文章主要介紹了springboot打包目錄解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • JavaMe開(kāi)發(fā)繪制可自動(dòng)換行文本

    JavaMe開(kāi)發(fā)繪制可自動(dòng)換行文本

    JavaMe Graphics類(lèi)中的drawString不支持文本換行,這樣繪制比較長(zhǎng)的字符串時(shí),文本被繪制在同一行,超過(guò)屏幕部分的字符串被截?cái)嗔恕H绾问估L制的文本能自動(dòng)換行呢?
    2015-09-09
  • Spring Boot 如何解決富文本上傳圖片跨域問(wèn)題

    Spring Boot 如何解決富文本上傳圖片跨域問(wèn)題

    這篇文章主要介紹了Spring Boot 如何解決富文本上傳圖片跨域問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • java多線(xiàn)程導(dǎo)入excel的方法

    java多線(xiàn)程導(dǎo)入excel的方法

    最近項(xiàng)目寫(xiě)了poi導(dǎo)入excel數(shù)據(jù)到數(shù)據(jù)庫(kù),想把學(xué)到的知識(shí)用于實(shí)踐,于是使用多線(xiàn)程方式導(dǎo)入excel,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05

最新評(píng)論

西乡县| 鹤山市| 敦煌市| 阿拉尔市| 古丈县| 四子王旗| 兴宁市| 同德县| 长春市| 来宾市| 台中县| 青冈县| 永福县| 彝良县| 东城区| 沂水县| 大渡口区| 青阳县| 十堰市| 皮山县| 玉环县| 东海县| 中超| 华安县| 青冈县| 汤原县| 牡丹江市| 柳林县| 黔南| 永善县| 扎鲁特旗| 封丘县| 阿拉善左旗| 和顺县| 陇西县| 闽清县| 墨竹工卡县| 鲁甸县| 鄂托克前旗| 肃南| 象州县|