代码1:
//函数形式
void SelectSort(int arr[], int n)
{
int temp;
for (int i = 0; i < n; ++i)
{
for (int j = i+1; j < n; ++j)
{
if (arr[i] > arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
//完整程序
#include<iostream>
using namespace std;
void SelectSort(int arr[], int n)
{
int temp;
for (int i = 0; i < n; ++i)
{
for (int j = i+1; j < n; ++j)
//让arr[i]和arr[i]之后的所有元素依次比较,如果arr[i]是大的,就交换
{
if (arr[i] > arr[j])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
int main()
{
int b[]={44,55,9,3,1,33,11,11,69,525};
SelectSort(b,10) ;
for(int i=0;i<10;++i)
cout<<b[i]<<' ';
cout<<endl;
return 0;
}
这样会使得多一些不必要的交换,所以我们优化一下,先找出a[i]以后最小的那一个,然后再交换。
代码2:
void SelectSort(int arr[], int n)
{
for (int i = 0; i < n; ++i)
{
int min=i;//记录最小元素的位置
for (int j = i+1; j < n; ++j)
if(arr[j]<arr[min]) min=j; //更新最小元素位置
if(i!=min) swap(arr[i],arr[min]) ;
}
}
#include<iostream>
using namespace std;
void swap (int &x,int &y)
{ int temp;
if (x > y)
{
temp = x;
x = y;
y = temp;
}
}
void SelectSort(int arr[], int n)
{
for (int i = 0; i < n; ++i)
{
int min=i;//记录最小元素的位置
for (int j = i+1; j < n; ++j)
if(arr[j]<arr[min]) min=j; //更新最小元素位置
if(i!=min) swap(arr[i],arr[min]) ;
}
}
int main()
{
int b[]={44,55,9,3,1,33,11,11,69,525};
SelectSort(b,10) ;
for(int i=0;i<10;++i)
cout<<b[i]<<' ';
cout<<endl;
return 0;
}
说白了其实就是每回从剩下的数里面找出最小的数a,然后和想排序的位置的那个数b作比较,如果b小就不用交换,这就是他本来的位置,也就是排序好的位置,如果b大,说明这个位置不是他的位置,就得给比他小的a让位,然后这一趟就排序好了。再进行下一趟。