版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39360985/article/details/78808171
编译器:Xcode
编程语言:C++
选择排序的基本思想:
每一趟在n-i+1(i=1,2,3…,n-1)个记录中选取关键字最小的记录与第i个记录交换,并作为有序序列中的第i个记录。例如:
待排序列: 43,65,4,23,6,98,2,65,7,79
第一趟: 2,65,4,23,6,98,43,65,7,79
第二趟: 2,4,65,23,6,98,43,65,7,79
第三趟: 2,4,6,23,65,98,43,65,7,79
第四趟: 2,4,6,7,43,65,98,65,23,79
第五趟: 2,4,6,7,23,65,98,65,43,79
第六趟: 2,4,6,7,23,43,98,65,65,79
第七趟: 2,4,6,7,23,43,65,98,65,79
第八趟: 2,4,6,7,23,43,65,65,98,79
第九趟: 2,4,6,7,23,43,65,65,79,98选择排序的时间复杂度为:O(n^2),空间复杂度:O(1)
选择排序是不稳定的;
源程序:
#include <iostream>
using namespace std;
void SelectSort(int a[],int n) //选择排序
{
int mix,temp;
for(int i=0;i<n-1;i++) //每次循环数组,找出最小的元素,放在前面,前面的即为排序好的
{
mix=i; //假设最小元素的下标
for(int j=i+1;j<n;j++) //将上面假设的最小元素与数组比较,交换出最小的元素的下标
if(a[j]<a[mix])
mix=j;
//若数组中真的有比假设的元素还小,就交换
if(i!=mix)
{
temp=a[i];
a[i]=a[mix];
a[mix]=temp;
}
}
}
int main()
{
int a[10] = {43, 65, 4, 23, 6, 98, 2, 65, 7, 79};
cout<<"选择排序:"<<endl;
SelectSort(a, 10);
for(int i=0;i<10;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
运行结果:
选择排序:
2 4 6 7 23 43 65 65 79 98
Program ended with exit code: 0