8.4.1直接选择排序
#include "stdafx.h"
#include <iostream.h>
#include <malloc.h>
int const count=8;
typedef struct
{
int key;
}records;
typedef records list[count+1];
void select(list & r)
{
for(int i=1;i<count;i++)
{
int k=i;
for(int j=i+1;j<=count;j++)
{
if (r[j].key<r[k].key)
{
k=j;
}
}
if (k!=i)
{
int key=r[k].key;
r[k].key=r[i].key;
r[i].key=key;
}
}
}
void printList(list r)
{
for(int i=0;i<count;i++)
{
if (i==0)
{
cout<<r[i+1].key;
}
else
{
cout<<","<<r[i+1].key;
}
}
cout<<endl;
}
int main(int argc, char* argv[])
{
list r;
/*
for(int i=0;i<count;i++)
{
cout<<"输入第"<<i+1<<"个主键";
cin>>r[i+1].key;
}
*/
r[1].key=70;
r[2].key=73;
r[3].key=69;
r[4].key=23;
r[5].key=93;
r[6].key=18;
r[7].key=11;
r[8].key=68;
cout<<"输入的序列为:"<<endl;
printList(r);
select(r);
cout<<"快速排序后的序列为:"<<endl;
printList(r);
return 0;
}
#include <iostream.h>
#include <malloc.h>
int const count=8;
typedef struct
{
int key;
}records;
typedef records list[count+1];
void select(list & r)
{
for(int i=1;i<count;i++)
{
int k=i;
for(int j=i+1;j<=count;j++)
{
if (r[j].key<r[k].key)
{
k=j;
}
}
if (k!=i)
{
int key=r[k].key;
r[k].key=r[i].key;
r[i].key=key;
}
}
}
void printList(list r)
{
for(int i=0;i<count;i++)
{
if (i==0)
{
cout<<r[i+1].key;
}
else
{
cout<<","<<r[i+1].key;
}
}
cout<<endl;
}
int main(int argc, char* argv[])
{
list r;
/*
for(int i=0;i<count;i++)
{
cout<<"输入第"<<i+1<<"个主键";
cin>>r[i+1].key;
}
*/
r[1].key=70;
r[2].key=73;
r[3].key=69;
r[4].key=23;
r[5].key=93;
r[6].key=18;
r[7].key=11;
r[8].key=68;
cout<<"输入的序列为:"<<endl;
printList(r);
select(r);
cout<<"快速排序后的序列为:"<<endl;
printList(r);
return 0;
}
一点说明:为什么在标题中要嵌入英文?原因是为了能够让国外的网友能查询到这篇文章。平常在Google上查资料的时候,经常参考国外网友的博客,帮助我解决了很多问题,所以我也想让他们能够参考我写的内容。当然文中我不可能全部译为英文,所以我尽量把代码粘全,靠代码说话吧。