C++資料結構與STL--選擇排序
阿新 • • 發佈:2019-01-10
*外部迴圈對錶進行n-1次遍歷。pass控制變數的範圍0-n-2
*對於每次重複過程,都有一個內部迴圈掃描arr[pass]到arr[n-1]的無序子表,並判定最小元素的下標。
*只有最小元素的下標(smallIndex)不等於pass,才交換arr[pass]和arr[smallIndex];
實現程式碼:
template<typename T>
//對長度為n的陣列進行選擇排序
void selectSort(T arr[],int n)
{
int pass=0;//控制外層迴圈
int smallIndex=0;//記錄子表最小元素的下標
int j=0;//控制內層迴圈
for( ;pass<n-1;pass++) //pass控制外層迴圈,共n-1次
{
smallIndex=pass; //假設每次外層子迴圈都是第一個數最小
for(j=pass+1;j<n;j++)
{
if(arr[smallIndex]>arr[j])
{
smallIndex=j;//每找到一個更小的元素,就記錄下該元素的下標
}
}
if(smallIndex!=pass)//交換arr[pass],arr[smallIndex]
{
T tem;
tem=arr[pass];
arr[pass]=arr[smallIndex];
arr[smallIndex]=tem;
}
}
}
*對於每次重複過程,都有一個內部迴圈掃描arr[pass]到arr[n-1]的無序子表,並判定最小元素的下標。
*只有最小元素的下標(smallIndex)不等於pass,才交換arr[pass]和arr[smallIndex];
實現程式碼:
template<typename T>
//對長度為n的陣列進行選擇排序
void selectSort(T arr[],int n)
{
int pass=0;//控制外層迴圈
int smallIndex=0;//記錄子表最小元素的下標
int j=0;//控制內層迴圈
for( ;pass<n-1;pass++) //pass控制外層迴圈,共n-1次
{
smallIndex=pass; //假設每次外層子迴圈都是第一個數最小
for(j=pass+1;j<n;j++)
{
if(arr[smallIndex]>arr[j])
{
smallIndex=j;//每找到一個更小的元素,就記錄下該元素的下標
}
}
if(smallIndex!=pass)//交換arr[pass],arr[smallIndex]
{
T tem;
tem=arr[pass];
arr[pass]=arr[smallIndex];
arr[smallIndex]=tem;
}
}
}