8.3.1冒泡排序
#include "stdafx.h"
#include <iostream.h>
#include <malloc.h>
int const count=10;
typedef struct
{
int key;
}records;
typedef records list[count+1];
void BubbleSort(list & r)
{
bool flag=1;
//最多需要比较n-1次
for(int i=1;i<count-1;i++)
{
bool flag=1;
//这里是<=count-i,需要减少一个节点,因为在循环里引用了比j大1的索引
for(int j=1;j<=count-i;j++)
{
if (r[j].key>r[j+1].key)
{
flag=0;
int tmp=r[j].key;
r[j].key=r[j+1].key;
r[j+1].key=tmp;
}
}
if (flag)
{
return;
}
}
}
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;
}
cout<<"输入的序列为:"<<endl;
printList(r);
BubbleSort(r);
cout<<"冒泡排序后的序列为:"<<endl;
printList(r);
return 0;
}
#include <iostream.h>
#include <malloc.h>
int const count=10;
typedef struct
{
int key;
}records;
typedef records list[count+1];
void BubbleSort(list & r)
{
bool flag=1;
//最多需要比较n-1次
for(int i=1;i<count-1;i++)
{
bool flag=1;
//这里是<=count-i,需要减少一个节点,因为在循环里引用了比j大1的索引
for(int j=1;j<=count-i;j++)
{
if (r[j].key>r[j+1].key)
{
flag=0;
int tmp=r[j].key;
r[j].key=r[j+1].key;
r[j+1].key=tmp;
}
}
if (flag)
{
return;
}
}
}
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;
}
cout<<"输入的序列为:"<<endl;
printList(r);
BubbleSort(r);
cout<<"冒泡排序后的序列为:"<<endl;
printList(r);
return 0;
}
一点说明:为什么在标题中要嵌入英文?原因是为了能够让国外的网友能查询到这篇文章。平常在Google上查资料的时候,经常参考国外网友的博客,帮助我解决了很多问题,所以我也想让他们能够参考我写的内容。当然文中我不可能全部译为英文,所以我尽量把代码粘全,靠代码说话吧。