一.排序分析
思想:每次从非排序区选择最小的记录,将其与非排序区的第一个记录交换。
直接选择排序
……
(3)
第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R[i..n](1≤i≤n-1)。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R[i]交换,使R[1..i]和R[i+1..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
二.代码(C++)
// sort.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include<assert.h>
#include<iostream>
using namespace std;
#define NUM 10
void exchange(int &a,int &b);
void Select_Sort(int *a,int n);
int _tmain(int argc, _TCHAR* argv[])
{
int *a=new int[NUM];
for (int i = 0; i < NUM; i++)
{
cin>>a[i];
}
cout<<endl;
Select_Sort(a,10);
for (int j = 0; j < NUM; j++)
{
cout<<a[j]<<" ";
}
cout<<endl;
return 0;
}
void exchange(int &a,int &b)
{
int temp=b;
b=a;
a=temp;
}
void Select_Sort(int *a,int n)
{
for (int i = 0; i < n; i++)
{
int temp=a[i];//初始化非排序区的最小记录
int k=i;//记录最小记录的下标
for (int j = i+1; j < n; j++)
{
if (a[j]<temp)
{
temp=a[j];
k=j;
}
}
exchange(a[i],a[k]);
}
}
三.结果截屏:
四.时间和空间复杂度及稳定性
时间复杂度:O(n2)
空间复杂度:O(1)
非稳定排序