排序演算法應該是最基礎的演算法了,博主面試至今沒有面試官單就乙個排序演算法讓寫個**什麼的。本篇小博先對常見的排序演算法進行一下總結,方便日後檢視吧。主要內容包括:氣泡排序(快速排序)、選擇排序(堆排序)、插入排序(希爾排序)、歸併排序。
一、氣泡排序
**如下:
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,我寫一下,只是方便自己日後檢視,當然也給有需要的朋友一些參考,歡迎指正 排序演算法有 氣泡排序,選擇排序,插入排序...