对《大话数据结构》P384~P385—简单选择排序,进行了自己的理解并完善了代码。
简单选择排序如下:
代码和解释如下(VS2012测试通过):
1 #include <iostream> 2 using namespace std; 3 #define MAXSIZE 5//用于要排序数组个数最大值,可根据需要修改 4 5 //排序用的顺序表结构 6 typedef struct 7 { 8 int r[MAXSIZE+1];//定义一个数组,用于存储要排序的数,r[0]作为临时变量 9 int length;//用于记录顺序表的长度 10 }SqList; 11 12 //排序表的初始化 13 SqList *InitSqList(SqList *L) 14 { 15 L=new SqList; 16 L->length=5;//本例中长度是5 17 cout<<"input list"<<endl; 18 for(int i=1;i<=L->length;i++) 19 cin>>L->r[i]; 20 return L; 21 } 22 23 //数组遍历输出 24 void PrintSqList(SqList *L) 25 { 26 for(int i=1;i<=L->length;i++) 27 cout<<L->r[i]<<" "; 28 cout<<endl; 29 } 30 31 32 //交换r[i]和r[j] 33 void swap(SqList *L,int i,int j) 34 { 35 int temp=L->r[i]; 36 L->r[i]=L->r[j]; 37 L->r[j]=temp; 38 } 39 40 //简单选择排序 41 void SelectSort(SqList *L) 42 { 43 int min; 44 for(int i=1;i<L->length;i++) 45 { 46 min=i;//min存储最小元素的下标,先假设当前元素最小 47 for(int j=i+1;j<=L->length;j++) 48 { 49 if(L->r[min]>L->r[j]) 50 min=j; 51 } 52 cout<<"min is "<<min<<endl; 53 if(i!=min) swap(L,i,min);//把i~length中最小的数归位 54 cout<<"after one sort"<<endl; 55 PrintSqList(L); 56 } 57 } 58 59 int main() 60 { 61 SqList *p=NULL; 62 p=InitSqList(p);//初始化 63 SelectSort(p);//排序 64 cout<<"after sort"<<endl; 65 PrintSqList(p);//输出 66 }
运行结果:
时间复杂度分析见草稿图。
时间复杂度是O(n2)。
原文:http://www.cnblogs.com/hslzju/p/5413896.html