複習三種最基本的排序演算法

2021-08-10 14:29:40 字數 1682 閱讀 2005

package algorithm;

/** * @author: kimt

* @version: 1.0

* @date: 2023年11月9日 上午11:13:04

* @description: 各種排序演算法

*/public class sortalg ;

bubblesort(a);

printarr(a);

} /**

* 插入排序之:快速插入排序

* * 基本思想:將待排序表看做是左、右兩部分,其中左邊為有序區,右邊為無序區,整個排序過程就是依次將右邊無序區中的記錄按關鍵字大小插入到左邊有序區中,

* 以構成新的有序區,直到全部記錄都排好序。

* * 適用情況:直接插入排序演算法簡單、容易實現,適用於待排序記錄基本有序或待排序記錄較少時。

* 當待排序的記錄個數較多時,大量的比較和移動操作使直接插入排序演算法的效率降低 時間複雜度:t(n)=o(n²) 空間複雜度:s(n)=o(1)

* * 該演算法思想:將待排序陣列劃分為左(已排序)右(待排序)兩個區間,選取右(待排序)區間a[1]->a[n-1]作為比較條件(a[i]),與a[i-1

* ]->a[0]作比較(為a[j]);

* 如果發現a[i]>a[j],則跳出比較內迴圈;否則進行移動操作,a[j+1]=a[j];跳出迴圈後,將a[i](即temp)進行排序(插入相應位置

* ),a[j+1]=temp

* * @param array

* 待排序陣列

*/public static void insertsort(int array)

array[j + 1] = temp;

} }/**

* 選擇排序之:簡單選擇排序

* 基本思想:將資料元素序列分成有序區和無序區兩部分。每趟排序都從無序區中選取出關鍵字最小的資料元素放在有序區的最後(無序區的最前),

* 直到全部資料元素排序完畢。

* * 時間複雜度:t(n)=o(n²)

* 空間複雜度:s(n)=o(1)

* * @param array

* 待排序陣列

*/public static void selectsort(int array)

if (min != i)

} }/**

* 交換排序之:氣泡排序

* 基本思想:每趟不斷將記錄兩兩比較,若發現逆序,則交換兩個記錄,使關鍵字較小(大)的元素逐漸從右(左)移向左(右)部

* * 時間複雜度為o(n2)

* s(n)=o(1)

* @param array 待排序陣列

*/public static void bubblesort(int array)

}*///方式二:往小(左)的方向冒泡

for (j = array.length - 1; j > i; j--)

}if (!exchange)

break;

} }/**

* 列印陣列

* * @param arr

* 待列印陣列

*/public static void printarr(int arr)

}}

三種基本排序演算法

示例陣列 以公升序為例 for int i 0 i arr.length i 輪數 第一次 j下標從0開始,第0位與第1位相比較,當第0位大於第1位時 3 1 進行交換。交換完陣列為 第二次j為1,第1位與第2位比較,3 5,不交換。第三次j為2,第2位與第3位比較,5 2,交換。陣列為 第四次j為...

三種基本排序

由於排序不僅是針對主關鍵字,那麼對於次關鍵字,因為待排序的記錄序列中可能存在兩個或者兩個以上的關鍵字相等的記錄,排序結果可能會存在不唯一的情況,所以我們給出了穩定與不穩定排序的定義。假設ki kj 1 i n,1 j n,i j 且在排序前的序列中 ri 領先於 rj 即i j 如果在排序後仍然領先...

三種排序演算法

1.氣泡排序法 2.選擇排序法 3.插入排序法 由小到大的順序 備註 網上筆試題,是參考網上別人的,具體出處找不到了,請諒解。摘抄記錄下來方便日後學習。如果有問題盡請批評指正,希望可以和大神一起交流。氣泡排序的最好的時間複雜度為o n 最壞的時間為 o n 2 演算法的平均時間複雜度為o n 2 選...