【資料結構】選擇排序!!!
在選擇排序裡面,是將陣列裡面的資料進行遍歷一遍,找到最大的元素,記錄下最大元素的下標,對最大放在合適的位置。
如圖:
實現程式碼:
void selectionSort(int[] list) {
// 需要遍歷獲得最小值的次數
// 要注意一點,當要排序 N 個數,已經經過 N-1 次遍歷後,已經是有序數列
for (int i = 0; i < list.length - 1; i++) {
int temp = 0;
int index = i; // 用來儲存最小值得索引
// 尋找第i個小的數值
for (int j = i + 1; j < list.length; j++) {
if (list[index] > list[j]) {
index = j;
}
}
temp = list[index];
list[index] = list[i];
list[i] = temp;
printAll(list);
}
}
但是,選擇排序在實現上面還是效率不夠高,因為一次遍歷只能找到一個元素。
優化:遍歷一次找到資料裡面的兩個元素,分別找到最小的元素和最小的元素,對最小和最大的元素進行相應位置的交換,那麼在時間複雜度上面就有一定的提高。
如圖:
實現程式碼:
void selectsort(int *arr,size_t size)
{
if(NULL == arr)
return ;
int left = 0;
int right = size;
while(left < right)
{
int i=left;
int Max = left;//定義最大元素和最小元素
int Min = left;
while(i < right-1)
{
if(arr[Max]< arr[i+1])
Max = i+1; //找到最大元素的下標
if(arr[Min] > arr[i+1])
Min = i+1; //找到最小元素的下標
i++;
}
swap(arr[left],arr[Min]); //將最小元素放到合適位置
if(Max == left)
Max = Min; //判斷最小元素的位置是不是在最大元素需要放置的位置
swap(arr[right-1],arr[Max]);
left++;
right--;
}
}
相關文章
- 【資料結構】選擇排序資料結構排序
- 資料結構32:選擇排序資料結構排序
- 複習資料結構:排序(三)——選擇排序資料結構排序
- 資料結構&演算法實踐—選擇排序資料結構演算法排序
- 資料結構與演算法——排序演算法-選擇排序資料結構演算法排序
- 【圖解資料結構】 一組動畫演示選擇排序圖解資料結構動畫排序
- 演算法與資料結構——選擇排序(c++)演算法資料結構排序C++
- 資料結構學習筆記-簡單選擇排序資料結構筆記排序
- 資料結構的選擇資料結構
- 資料結構和演算法:03.冒泡、選擇排序資料結構演算法排序
- 重學資料結構和演算法(四)之氣泡排序、插入排序、選擇排序資料結構演算法排序
- 演算法與資料結構系列 ( 三 ) - 選擇排序法- Select Sort演算法資料結構排序
- 看圖輕鬆理解資料結構與演算法系列(選擇排序)資料結構演算法排序
- 選擇結構
- 從零開始學資料結構和演算法(一)冒泡與選擇排序資料結構演算法排序
- 資料結構與排序資料結構排序
- 【資料結構】希爾排序!!!資料結構排序
- 【資料結構】希爾排序資料結構排序
- 【資料結構】堆排序資料結構排序
- 【資料結構】快速排序資料結構排序
- 【資料結構】歸併排序!!!資料結構排序
- 【資料結構】氣泡排序資料結構排序
- 【資料結構】歸併排序資料結構排序
- 【資料結構與演算法】內部排序之二:氣泡排序和選擇排序(改進優化,附完整原始碼)資料結構演算法排序優化原始碼
- 選擇排序排序
- 排序之選擇排序排序
- 排序演算法總結之直接選擇排序排序演算法
- 資料結構(python) —— 【18排序: 桶排序】資料結構Python排序
- 順序結構與選擇結構
- switch選擇結構使用
- 選擇排序和快速排序排序
- 資料結構第10章 排序資料結構排序
- 資料結構之計數排序資料結構排序
- 資料結構 堆排序 c Swift資料結構排序Swift
- 選擇排序中交換資料的不同方式出現的不同結果排序
- 複習資料結構:排序(一)——插入排序資料結構排序
- js選擇排序JS排序
- Java 選擇排序Java排序