幾種常見的排序演算法

2021-06-12 21:08:28 字數 2383 閱讀 5752

氣泡排序演算法的運作如下:

1、比較相鄰的元素。如果第乙個比第二個大,就交換他們兩個。

2、對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。

3、針對所有的元素重複以上的步驟,除了最後乙個。

4、持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

void bubblesort(int arr, int n)

}

}

交換兩個資料,可以用用臨時變數,也可用以下的兩個方法

a = a^b;

b = a^b;

a = a^b;

或者a = a + b;

b = a - b;

a = a - b;

/**

* 雞尾酒排序法

* *正常氣泡排序法,每次遍歷都是向乙個方向冒出最值,

*而雞尾酒排序法是變異的氣泡排序法,往返方向找出最值

*/public void sort(int a)

}

/**

*改進的冒泡演算法,在第i次遍歷時,若沒有交換資料,說明剩餘的資料已經是有序的

*/void bubblesort(int arr)

}if(didswap == false)

return;

}

}

選擇排序的工作原理:

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

/**

* @brief 選擇排序

* * @param list 要排序的陣列

* @param n 陣列中的元素數量

*/void selectsort(int *list, int list_size)

}// 如果找到了比當前小的, 就把當前元素與之交換

if (min_index != i)

}}

歸併操作的過程如下:

1、申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合併後的序列

2、設定兩個指標,最初位置分別為兩個已經排序序列的起始位置

3、比較兩個指標所指向的元素,選擇相對小的元素放入到合併空間,並移動指標到下一位置

4、重複步驟3直到某一指標到達序列尾

5、將另一串行剩下的所有元素直接複製到合併序列尾

/**

* @brief 歸併排序

* * @param *list 要排序的陣列

* @param n 陣列中的元素數量

*/void mergesort(int *list, int list_size)}

/** * @brief 歸併兩個有序陣列

* * @param list1

* @param list1_size

* @param list2

* @param list2_size

*/void merge_array(int *list1, int list1_size, int *list2, int list2_size)

// 如果 list1 還有元素,把剩下的資料直接放到結果陣列

while (i < list1_size)

// 如果 list2 還有元素,把剩下的資料直接放到結果陣列

while (j < list2_size)

// 把結果陣列 copy 到 list1 裡

for (int ii = 0; ii < (list1_size + list2_size); ++ii)

free(list);

}

快速排序的步驟

1.先從數列中取出乙個數作為基準數。

2.分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。

3.再對左右區間重複第二步,直到各區間只有乙個數。

/** 

* @brief 快速排序

* * @param list 要排序的陣列

* @param lindex 左下標

* @param rindex 右下標

*/

void quicksort(int list, int lindex, int rindex)

list[i] = x;

quicksort(list, lindex, i - 1); // 遞迴呼叫

quicksort(list, i + 1, rindex);

}}

幾種常見排序演算法

幾種常見排序演算法 1氣泡排序 bubble sort 氣泡排序思路 將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素 第一輪結束後,序列最後乙個元素一定是當前序列的最大值 對序列當中剩下的n 1個元素再次執行步驟1。3.對於長度為n的序列,一共需要執行n 1輪比較 實現 for i...

幾種常見排序演算法

1氣泡排序 bubble sort 氣泡排序思路 1.將序列當中的左右元素,依次比較,保證右邊的元素始終大於左邊的元素 第一輪結束後,序列最後乙個元素一定是當前序列的最大值 2.對序列當中剩下的n 1個元素再次執行步驟1。3.對於長度為n的序列,一共需要執行n 1輪比較 實現 for i 0 i n...

幾種常見排序演算法

以下內容包括 氣泡排序,選擇排序,桶排序 一 氣泡排序 bubblesort public class bubblesort int temp 0 for int i 0 i1 i system.out.println arrays.tostring arr 用arrays類中的tostring方法...