資料結構之排序演算法 彙總

2021-07-02 07:21:40 字數 2384 閱讀 1316

排序演算法應該是最基礎的演算法了,博主面試至今沒有面試官單就乙個排序演算法讓寫個**什麼的。本篇小博先對常見的排序演算法進行一下總結,方便日後檢視吧。主要內容包括:氣泡排序(快速排序)、選擇排序(堆排序)、插入排序(希爾排序)、歸併排序。

一、氣泡排序

**如下:

public static int bubblesort(int a) 

}if(flag == 0)

break;

} return a;

}

二、選擇排序

思路:兩個迴圈變數i和j,乙個最小值指標min,外層迴圈從0開始,min每次都初始化為i,內層迴圈j從i+1開始,其效能略優於氣泡排序法,**如下:

public static int selectsort(int a) 

}if(change)

} return a;

}

三、插入排序

思路:遍歷陣列,將陣列後面的數按照順序插入到正確的位置,**如下

public static int insertsort(int a) 

} return a;

}

四、希爾排序

思路:分組的插入排序,**如下:

public static int shellsort(int a) }}

return a;

}

五、堆排序

關鍵問題:怎麼將乙個數列變成為乙個大頂堆,其實質就是從下往上、從右到左將每個非終端節點當做根節點,將其和其子樹調整成大頂堆,**如下

public static void heapadjust(int a, int s, int m) 

a[s] = temp;                           //較大孩子節點處的值變成根節點

} //程式本質就是完成根節點與孩子節點的交換,選出最大值作為新的根節點

public static int heapsort(int a)

for(int i = a.length-1; i > 1; i--)

return a;

}

六、歸併排序

主要用到了合併兩個有序陣列為乙個有序陣列,遞迴呼叫,**如下:

public static void merge(int nums, int low, int mid, int high)  else   

} // 把左邊剩餘的數移入陣列 其實這兩個while只會執行乙個,因為短的那個i/j已經 >mid/high了

while (i <= mid)

// 把右邊邊剩餘的數移入陣列

while (j <= high)

// 把新陣列中的數覆蓋nums陣列

for (int k2 = 0; k2 < temp.length; k2++)

} public static int sort(int nums,int low,int high)

return nums;

} public static int mergesort(int a)

return sort(a,0,a.length-1);

}

七、快速排序

//基本思想:選擇乙個基準元素,通常選擇第乙個元素或者最後乙個元素,通過一趟掃瞄,將待排序列分成兩部分,

//一部分比基準元素小,一部分大於等於基準元素,此時基準元素在其排好序後的正確位置,然後再用同樣的方法遞迴地排序劃分的兩部分。

//快速排序是不穩定的排序。

//快速排序的時間複雜度為o(nlogn)。

//當n較大時使用快排比較好,當序列基本有序時用快排反而不好。

public static int getmiddle(int a,int low,int high)

while(low < high && a[low] < temp)

int t = a[low];

a[low] = a[high];

a[high] = t;

} return high;

} public static void qsort(int a,int low,int high)

} public static void quicksort(int a,int low,int high)

}}

排序演算法彙總(資料結構)

1.氣泡排序 氣泡排序 int a 20 int n for int i 0 i1 i 而對於氣泡排序有乙個優化的方法,優化在於當一次排序沒有進行過交換的時候,也就是之後的順序都是有序的時候,相當於整個序列都是有序的了。氣泡排序優化 int a 20 int n int falg 做乙個標記位來判斷...

資料結構之排序演算法

1.插入排序 直接插入排序 include void insertsort int unsort int length unsort j temp int main void insertsort num,7 int i 0 for i i 7 i return 0 折半插入排序 include v...

資料結構之排序演算法

學過好久的東西,感覺都忘記的差不多了,雖然可能日常寫 的過程之中也可能寫過一些演算法,但是從來都沒有規整,最近忙裡偷閒,寫點關於排序的演算法,當然好多人都寫過一些很不錯的演算法blog,我寫一下,只是方便自己日後檢視,當然也給有需要的朋友一些參考,歡迎指正 排序演算法有 氣泡排序,選擇排序,插入排序...