排序演算法哪家強之選擇排序2 雙管齊下版

2021-09-24 05:35:13 字數 1271 閱讀 5155

昨天給大家分享了選擇排序,昨天我們用乙個標記符maxpos來遍歷待排序區間,然後每乙個遍歷,找出乙個最大值,然後將其放在區間的末尾,今天我們嘗試一種新的方法. 這種方法更高效 快捷.

原理如下:

我們使用兩個標記符 maxpos (標記最大值元素位置) minpos(標記最小值元素位置),讓這兩個標記符同時從陣列首位開始遍歷陣列,然後每一次遍歷就找出乙個最大值和乙個最小值. 每找到一對最值 就縮小下一次的遍歷空間 .這樣雙管齊下查詢效率更高

具體**如下 (**具體細節展示在注釋中)

#include#includevoid swap(int* x, int* y)

// 排序演算法哪家強之選擇排序(雙管齊下版);

// 輸入: 陣列元素 和陣列大小

void selectsort2(int *array, int size)

if (array[index] < array[minpos])

index++;//更新index ,讓它繼續標記下乙個元素

} //因為先處理的是最大值的問題,有這樣一種情況: 排序前 最小值就在待排序陣列中最後乙個位置,此時用minpos標記

// 如果在其他位置找到最大值元素,然後將兩者交換,那麼minpos不在表示原來的最小值,最小值的位置已經變為最大值,

// 因此 應該更新minpos 否則會發生錯誤

if (minpos == end)

// 將最大值放在陣列最後乙個位置

// 因為, 原陣列可能本來就是有序陣列即 最大值元素就在陣列末尾,此時不需要進行交換

// 所以在交換前需要做乙個判斷

if (maxpos != end)

// 將最小值放在第乙個位置

// 因為, 原陣列可能本來就是有序陣列即 最小值元素就在陣列首位,此時不需要進行交換

// 所以在交換前需要做乙個判斷

if (minpos != begin)

begin++;

end--; }}

void print(int *array, int size)

printf("\n");

}int main();

int size = sizeof(array) / sizeof(array[0]);

selectsort2(array, size);

print(array, size);

system("pause");

return 0;

}

排序演算法哪家強之選擇排序

今天分享一種新的排序演算法 選擇排序 選擇排序演算法實現原理 以公升序為例 首先假定陣列首元素為陣列元素中最大的元素,用maxpos來標記最大元素 接著遍歷陣列中其他元素,並將最大值與所遍元素比較,如果有那個元素大於maxpos標記的元素,就用maxpos來標記它 更新maxpos 每一次遍歷選出陣...

演算法之排序2 選擇排序

選擇排序的基本思想 每次選擇出乙個最大 最小 的數,放到最前 最後 其實選擇排序和氣泡排序非常類似,每一次計算都是選出乙個最大 最小 的數,差異在於處理的方式不一樣。第一次選擇 用第乙個數,逐次比對後面的所有的數,把更小的數放在第一位 第二次選擇 用第二個數,逐次比對後面的所有的數,把更小的數放在第...

排序演算法2 選擇排序

選擇排序 selection sort 通過多次比較和交換來實現排序,其排序流程如下 1.選取陣列中最小的乙個元素和陣列的第乙個元素交換。2.接著從剩下的所有元素中選擇最小的與第二個元素交換。3.和第二步同樣的方法對剩下的所有元素進行排序,最後便可得到按照從大到小的順序排好陣列中的各元素。具體過程如...