10种常见的排序算法

2019-09-02 18:37

1.冒泡排序

已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n-1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理n-1轮后a[1]、a[2]、……a[n]就以升序排列了。

优点:稳定,比较次数已知;

缺点:慢,每次只能移动相邻两个数据,移动数据的次数多。

初始关键字 [49 3865 97 76 13 27 49]

第一趟排序后 [38 4965 76 13 27 49] 97

第二趟排序后 [38 4965 13 27 49] 76 97

第三趟排序后 [38 4913 27 49] 65 76 97

第四趟排序后 [38 1327 49] 49 65 76 97

第五趟排序后 [38 1327] 49 49 65 76 97

第六趟排序后 [13 27]38 49 49 65 76 97

第七趟排序后 [13] 2738 49 49 65 76 97

最后排序结果 13 2738 49 49 76 76 97

#include

using namespace std;

void main() {

int i,j,k;

int a[8]={49,38,65,97,76,13,27,49};

for(i=7;i>=0;i--) {

for(j=0;j

if(a[j]>a[j+1])

{

k=a[j];

a[j]=a[j+1];

a[j+1]=k;

} } }

for(i=0;i<8;i++)

cout<

2.选择排序

①初始状态:无序区为R[1..n],有序区为空。

②第1趟排序

在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。

……

③第i趟排序

第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R[i..n](1≤i≤n-1)。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区.这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。

优点:稳定,比较次数与冒泡排序一样;

缺点:相对之下还是慢。

初始关键字 [49 3865 97 76 13 27 49]

第一趟排序后 13 [38 65 97 76 49 27 49]

第二趟排序后 13 27 [65 97 76 49 38 49]

第三趟排序后 13 2738 [97 76 49 65 49]

第四趟排序后 13 2738 49 [49 97 65 76]

第五趟排序后 13 2738 49 49 [97 97 76]

第六趟排序后 13 2738 49 49 76 [76 97]

第七趟排序后 13 2738 49 49 76 76 [ 97]

最后排序结果 13 2738 49 49 76 76 97

#include

using namespace std;

void main()

{

int i,j,k,t;

int R[8]={49,38,65,97,76,13,27,49};

for(i=0;i<7;i++) { k=i;

for(j=i+1;j<8;j++)

if(R[j]

k=j;

if(k!=i) {

t=R[j];R[j]=R[k];R[k]=t; } }

for(i=0;i<8;i++)

cout<

3.插入排序

已知一组,一组无序数据b[1]、b[2]、……b[m],需将其变成一个升序数列。先创建一个变量a。首先将不b[1]与b[2],如果b[1]大于b[2]则交换位置,否则不变;再比较b[2]与b[3],如果b[3]小于b[2],则将b[3]赋值给a,再将a与b[1]比较,如果a小于b[1];则将b[2],b[1]依次后移;在将a放在b[1]处以此类推,直到排序结束。

初始关键字 [49 3865 97 76 13 27 59]

a b[1] b[2] b[3] b[4] b[5] b[6] b[7] b[8]

1-----49 49 > 38 65 97 76 13 27 59

38 49 49 ……….

38 38 49 ……….

2-----38 38 49 < 65 97 76 13 27 59

3-----38 38 49 65 <97 76 13 27 59

4----38 38 49 65 97> 76 13 27 59

76 38 49 65 97 97……..

76 38 49 65 76 97……..

以此类推

void insertSort(Type* arr,long len) {

long i=0,j=0;

for(i=1;i

j=i;

tmpData=arr[j];//tmpData用来储存数据

while(tmpData0)

{

arr[j]=arr[j-1];

j--;

}

arr[j]=tmpData;


10种常见的排序算法.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:第6讲 分类枚举(学生版)

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: