排序算法(一)

排序算法是算法的入門知識,在面試中經(jīng)常被問到排序算法及相關的問題,因此在學習的同時做一次總結。歡迎訪問作者的個人博客

冒泡排序

基本思想:是從左到右兩兩比較相鄰數(shù)據(jù),若反序則進行交換。第一輪比較從0~N-1;第二輪0~N-2……最后一輪比較0~1。

時間復雜度:O(n)~O(n^2)

C代碼:

void bubble_sort(int a[], int N)
{
    for (int i=0; i<N-1; i++)
    {
        for (int j=0; j<N-1-i; j++)
        {
            if (a[j] > a[j+1])
            {
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
    }
}

優(yōu)化:設置標志位,若某一輪沒有任何元素位置發(fā)生變化,則排序完成。

優(yōu)化代碼:

void bubble_sort(int a[], int N)
{
    int sort = 1;
    for(int i=0; i<N-1; i++)
    {
        for(int j=0; j<N-1-i; j++)
        {
            if(a[j] > a[j+1])
            {
                sort = 0;
                int temp = a[j];
                a[j] = a[j+1];
                a[j+1] = temp;
            }
        }
        if(sort) break;
    }
}

選擇排序

基本思路:在0~N-1選最小值放在0位置;在1~N-1選最小值放在1位置……在N-2~N-1選最小值放在N-2位置。

時間復雜度:O(n^2)

C代碼:

void select_sort(int a[], int N)
{
    for(int i=0; i<N-2; i++)
    {
        for(int j=i+1; j<N; j++)
        {
            if(a[i] > a[j])
            {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
}

插入排序

基本思路:先比較位置0、1兩數(shù),小值置左;再將位置2的數(shù)與已排好序的隊列從右向左依次比較,小值置左;再將位置3的數(shù)與已排好序的隊列從右向左依次比較,小值置左……最后將位置N-1的數(shù)與已排好序的隊列從右向左依次比較,小值置左。

時間復雜度:O(n^2)

C代碼:

void insert_sort(int a[], int N)
{
    for(int i=0; i<N-1;i++)
    {
        for(int j=i+1; j>0; j--)
        {
            if(a[j-1] > a[j])
            {
                int temp = a[j-1];
                a[j-1] = a[j];
                a[j] = temp;
            }
        }
    }
}

同樣可以設置標志位進行優(yōu)化:

void insert_sort(int a[], int N)
{
    int sort = 1;
    for(int i=0; i<N-1;i++)
    {
        for(int j=i+1; j>0; j--)
        {
            if(a[j-1] > a[j])
            {
                sort = 0;
                int temp = a[j-1];
                a[j-1] = a[j];
                a[j] = temp;
            }
            if(sort) break;
        }
    }
}

結語

本篇文章總結了時間復雜度為O(n^2)的排序算法。如果對您有所幫助,歡迎對作者進行打賞,萬分感謝!

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • 排序(Sort)是計算機程序設計中十分常見且重要的操作。是將一個數(shù)據(jù)元素的序列,重新排列成一個按關鍵字有序的序列。...
    f9220927560a閱讀 535評論 0 0
  • 概述:排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    每天刷兩次牙閱讀 3,829評論 0 15
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,306評論 0 52
  • 排序是筆試面試的常考知識點,檢驗應聘者對排序這類基本算法的接受程度和數(shù)據(jù)結構的理解。在2017春季暑期實習生招聘過...
    Chuck_Hu閱讀 273評論 0 0
  • 《媯 水 河 游 記》 作者 心兮若云(煙柳斜陽) 很小的時候就喜歡讀唐詩宋詞,而唐詩宋詞中尤喜歡描寫江南...
    煙柳斜陽閱讀 1,449評論 0 2

友情鏈接更多精彩內(nèi)容