选择排序跟冒泡排序其实很相像。
它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。
#include <iostream>
#include <time.h>
#include <stdlib.h>
#define size 10
using namespace std;
void select_sort(int a[],int len)
{
int k=0;
for(int i=0;i<len-1;i++)
{
k=i;
for(int j=i+1;j<len;j++)
{
if(a[j]<a[k])
k=j;
}
if(k!=i)
{
a[i]^=a[k];
a[k]^=a[i];//swap
a[i]^=a[k];
}
}
}
int main()
{
int a[10];
srand((unsigned)time(NULL));
cout<<"waitting sort:"<<endl;
for(int i=0;i<size;i++)
{
a[i]=rand()%20; //随机生成size个数并排序
cout<<a[i]<<" ";
}
cout<<endl;
select_sort(a,10);
cout<<"sorted:"<<endl;
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
return 0;
}
#include <iostream>
using namespace std;
void selectsort(int *p,int n)
{
for(int i=0;i<n-1;i++)
{
for(int j=i+1;j<n;j++)
{
if(p[i]>p[j])
{
p[i]^=p[j];
p[j]^=p[i];
p[i]^=p[j];
}
}
}
}
void selectsortbetter(int *p,int n)//改进
{
for(int i=0;i<n-1;i++)
{
int idx=i;
for(int j=i+1;j<n;j++)
{
if(p[idx]>p[j])
idx=j;
}
if(idx!=i)
{
p[i]^=p[idx];
p[idx]^=p[i];
p[i]^=p[idx];
}
}
}
int main()
{
int arr[]={1,4,7,8,5,2,3,6,9,10};
selectsortbetter(arr,10);
for(int i=0;i<10;i++)
cout<<arr[i]<<" ";
return 0;
}