排序演算法 史上最通俗易懂的 選擇排序 詳解

2021-10-14 03:43:24 字數 2375 閱讀 9281

從待排序的n個資料中,每一趟在n-i+1個元素中選擇值最小的元素作為有序序列中的第i個元素,從而達到排序的目的。簡單說就是:第一趟:在n個元素中選擇最小的元素與待排序數列的第乙個元素交換第二趟:在第2~n個元素中選擇最小的元素與待排序數列的第二個元素交換第三趟:在第3~n個元素中選擇最小的元素與待排序數列的第三個元素交換

1、可以發現n個元素共需要進行n-1趟排序就可完成,因為前n-1個元素確定好位置之後,最後乙個自然而然就確定好了位置2、當選擇出了最小的元素之後,若發現其就已經處於將要放置的位置時,則可以不用交換

//待排序陣列

int arr = ;

//記錄最小元素

int min;

//記錄最小元素的下標

int index;

/************===第一趟排序***************

* 從第1個 ~ 第5個元素中選出最小的進行交換

*///假設第1個元素是最小的

min = arr[0];

index = 0;

//從第2個元素開始遍歷

for (int j = 1; j < arr.length; j++)

}//開始交換,將最小的元素放置到第1個位置

arr[index] = arr[0];

arr[0] = min;

/*****************第二趟排序***************==

* 從第2個 ~ 第5個元素中選出最小的進行交換(因為第乙個元素已經確定了)

*///假設第2個元素是最小的

min = arr[1];

index = 1;

//從第3個元素開始遍歷

for (int j = 2; j < arr.length; j++)

}//開始交換,將最小的元素放置到第2個位置

arr[index] = arr[1];

arr[1] = min;

/*****************第三趟排序***************==

* 從第3個 ~ 第5個元素中選出最小的進行交換(因為第1,2個元素已經確定了)

*///假設第3個元素是最小的

min = arr[2];

index = 2;

//從第4個元素開始遍歷

for (int j = 3; j < arr.length; j++)

}//開始交換,將最小的元素放置到第3個位置

arr[index] = arr[2];

arr[2] = min;

/*****************第四趟排序***************==

* 從第4個 ~ 第5個元素中選出最小的進行交換(因為第1,2,3個元素已經確定了)

*///假設第4個元素是最小的

min = arr[3];

index = 3;

for (int j = 4; j < arr.length; j++)

}//交換

arr[index] = arr[3];

arr[3] = min;

//每次從當前位置到最後位置之間選擇出最小的元素,放到當前的位置

for (int i = 0; i < arr.length - 1; i++)

}//交換

arr[index] = arr[i];

arr[i] = min;

}

在上邊的小結中我們指出了,當選擇出了最小的元素之後,若發現其就已經處於將要放置的位置時,則可以不用交換,因此**優化如下:

//每次從當前位置到最後位置之間選擇出最小的元素,放到當前的位置

for (int i = 0; i < arr.length - 1; i++)

}//交換

//如果要交換的就是當前的元素,則不用交換

if (index != i)

歐了,**中注釋部分解釋的應該挺詳細的了,我是小k,勇敢做自己,做最好的自己=。=

史上最通俗易懂git簡易指南

助你開始使用 git 的簡易指南,本文 羅傑 杜德勒 感謝 tfnico,fhd and namics 其他語言 english,deutsch,espa ol,fran ais,italiano,nederlands,portugu s,t rk e,日本語,如有紕漏,請到 github 填報 建...

字典排序演算法(通俗易懂)

我們先看乙個例子。示例 1 2 3的全排列如下 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1 我們這裡是通過字典序法找出來的。那麼什麼是字典序法呢?從上面的全排列也可以看出來了,從左往右依次增大,對這就是字典序法。可是如何用演算法來實現字典序法全排列呢?你主要看紅色字型部分...

最通俗易懂的p value講解

這個問題,曾一度讓我懷疑我根本都沒有學懂知識,只是像規則一樣記住然後胡亂使用而已。此番記錄就當再次考驗我是否真正理解到p value的含義。p value,代表在原假設條件下,實驗事件可能發生的概率。舉例說明 拋一枚硬幣,正面朝上和反面朝上的概率是一樣的,各50 但這是有前提條件的,即硬幣是均勻的 ...