`

两个排序算法比较

阅读更多

一.起泡法排序
起泡法排序:掌握两个重点,(1)N个数排序需要进行N-1趟排序;(2)第J趟排序需进行N-J次比较(交换).

程序如下:定义一维数组,这里a[0]不用,存储a[1]...a[5]共5个元素,因此N为5.
#include <stdio.h>
main()
{
int i,j,temp,a[6];
printf("\n input the number \n");
for(i=1;i<=5;i++)
scanf("%d",&a[i]);
printf("\n");
for(j=1;j<=4;j++)
for(i=1;i<=5-j;i++)
{
if(a[i]>a[i+1]) {temp=a[i];a[i]=a[i+1];a[i+1]=temp;}
}
for(i=1;i<=5;i++)
printf("\n%d",a[i]);
}
上述程序中,第一个循环用于控制输入,第二个循环用于控制进行排序的趟数,第三个循环则用于每一趟排序中需进行比较交换的次数.

二.选择排序

此排序算法两种理解:
1将N个数中最首的元素与其它元素比较,令P始终指向首元素所在的位置,即使它与其它元素交换了位置;N个元素共进行N-1轮排序,进行完第一轮排序后,将剩下N-1个元素中的首元素与与其它元素比较,令P始终指向首元素所在的位置,即使它与其它元素交换了位置;。。。。。
2.每次将最小或最大的数交换到(相对)最首的位置,依次循环,执行N-1次。
1。
main()
{
int p,q,a[10],i,j,temp;
printf("input the number:\n");
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
{
p=i;
q=a[i];

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

if(q>a[j]) {p=j;q=a[j];}
if(i!=p)
{
temp=a[i];
a[i]=a[p];
a[p]=temp;
}

printf("%d",a[i]);
printf(",");
}
}

2.
void sort(int array[],int n)
{
int i,j,k,t;
for(i=0;i<n-1;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(a[j]<a[k]) k=j;
t=array[k];array[k]=array[i];array[i]=t;
}
}
main()
{
int i,a[10];
printf("input the array\n");
for(i=0;i<10;i++)
scanf("%d",a[i]);
sort(a,10);
printf("the sorted array\n");
for(i=0;i<10;i++)
printf("%d",a[i]);
printf("\n");
}

三.把一个整数按大小顺序插入已排好序的数组中。
为了把一个数按大小插入已排好序的数组中, 应首先确定排序是从大到小还是从小到大进行的。设排序是从大到小进序的,则可把欲插入的数与数组中各数逐个比较,当找到第一个比插入数小的元素i时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元素为止,逐个后移一个单元。最后把插入数赋予元素i即可。如果被插入数比所有的元素值都小则插入最后位置。
main()
{
int i,a[6];
int p,q,j,temp;
int key,k;
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
printf("\n");
for(i=0;i<5;i++)
printf("%d,",a[i]);

for(i=0;i<5;i++)
{
p=i;
q=a[i];
for(j=i+1;j<5;j++)
{
if(q<a[j])
{
p=j;
q=a[j];
}
if(i!=p)
{
temp=a[i];
a[i]=a[p];
a[p]=temp;
}
}
}
printf("\nThe first sorted num:");
for(i=0;i<5;i++)
printf("%d,",a[i]);

printf("\n Input the key num:");
scanf("%d",&key);
for(i=0;i<5;i++)
if(key>a[i])
{
for(k=4;k>=i;k--)
a[k+1]=a[k];
break;
}
a[i]=key;
for(i=0;i<=5;i++)
printf("%d,",a[i]);
printf("\n");

}
本程序首先对数组a中的10个数从大到小排序并输出排序结果。然后输入要插入的整数n。再用一个for语句把n和数组元素逐个比较,如果发现有n> a[i]时,则由一个内循环把i以下各元素值顺次后移一个单元。后移应从后向前进行(从a[9]开始到a[i]为止)。后移结束跳出外循环。插入点为i,把n赋予a[i]即可。如所有的元素均大于被插入数,则并未进行过后移工作。此时i=10,结果是把n赋于a[10]。最后一个循环输出插入数后的数组各元素值。

分享到:
评论

相关推荐

    内部排序算法比较 课程设计

    【内部排序算法比较课程设计】主要关注的是对六种经典的内部排序算法的性能对比,包括起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序和堆排序。这些算法是计算机科学中用于对数据进行排序的基础工具,各...

    各种排序算法比较(java实现)

    `Algorithm.java`文件可能包含了这些排序算法的Java实现代码,而`常见排序算法的实现与性能比较.doc`文档则可能详细比较了这些算法的性能和适用场景。`readme.txt`文件可能是对整个项目的简要说明,包括如何运行和...

    数据结构课程设计(内部排序算法比较_C语言)

    ### 数据结构课程设计:内部排序算法比较_C语言 #### 一、课题背景与意义 排序作为数据结构中的重要组成部分,在实际开发中具有广泛的应用场景。理解不同排序算法的特点及其适用场景,对于提高程序效率和解决问题...

    各种排序算法比较

    ### 各种排序算法比较 #### 一、稳定性比较 稳定性是排序算法中一个重要的特性,指的是相等的元素在排序前后保持原有的相对位置不变。根据文档提供的信息,我们可以总结出以下结论: - **稳定排序**:插入排序、...

    最快的排序算法 计算机最快的算法-史上14个最快速算法:孩子的计算能力爆表!大脑堪比计算机!...,排序算法数据结构

    归并排序算法是一种高效的排序算法,它的工作原理是通过将数组分为两个部分,然后将每个部分排序,最终合并两个部分以达到排序的目的。归并排序算法的时间复杂度为O(n log n),因此它适合大规模的数据排序。 6.堆...

    内部排序算法比较

    **内部排序算法比较** 在计算机科学中,内部排序是指数据在内存中进行的排序过程,无需额外的存储设备。本报告主要关注了六种常见的内部排序算法:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序和堆...

    算法分析与设计 排序算法比较

    算法分析与设计排序算法比较 通过对各种排序算法的思想、算法的分析,探究它的使用范围以及时间复杂度和空间复杂度。 冒泡排序算法 冒泡排序算法思想简单描述:在要排序的一组数中,对当前还未排好序的范围内的...

    课程设计 内部排序算法比较

    冒泡排序是一种简单的排序算法,它重复地遍历待排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 - **比较次数**...

    各种排序算法性能的比较

    快速排序是一种高效的排序算法,它的工作原理是选择一个枢轴元素,然后将数组分割成两个子数组,并递归地对每个子数组进行排序。该算法的时间复杂度为O(n log n),空间复杂度为O(log n)。在我们的实现中,我们使用了...

    C语言数据结构内部排序算法及比较

    本文将深入探讨“C语言数据结构内部排序算法及比较”这一主题,结合个人课程作业的经验,对一些核心概念进行阐述,并对常见的内部排序算法进行比较。 首先,数据结构是组织和管理数据的方式,它包括数组、链表、树...

    常用的排序算法总结(各种内部排序算法和外部排序算法)

    稳定排序是指在排序前后,相等关键字的相对位置保持不变,例如,序列3, 15, 8, 8, 6, 9经过稳定排序后,两个8的相对位置不会改变。而不稳定排序则可能改变相等关键字的相对位置。 内部排序是针对数据量较小,能一次...

    实验 9 排序算法实验比较

    基于教材内容,任选两种排序算法,实现并比较性能。 基本要求 (1)至少要有一种排序算法的性能优于 O(n2 ) (2)对实现的排序算法进行实验比较,实验比较数据参见教材 7.8 章节 (3)排序算法要基于教材,测试输入...

    排序算法超完美比较

    归并排序的关键在于归并过程,即将两个有序的子序列合并成一个有序序列。 外部排序是指由于排序的数据量过大,无法一次全部装入内存,需要借助外部存储(如硬盘)进行排序的过程。常见的外部排序方法包括多路归并...

    数据机构综合课设内部排序算法比较.docx

    本篇文章将深入探讨10种常见的内部排序算法,包括它们的基本思想、比较次数和移动次数的计算,以便更直观地理解不同算法的效率。 1. **直接插入排序**: 直接插入排序是一种简单的排序算法,它通过比较新元素与已...

    Verilog/C++实现排序算法:Verilog/C++实现排序算法:冒泡排序、选择排序、并行全比较排序、串行全比较排序

    在IT领域,编程语言如C++和硬件描述语言如Verilog是两个重要的工具,分别用于软件和硬件设计。本文将探讨如何使用这两种语言实现几种基本的排序算法:冒泡排序、选择排序,以及两种全比较排序(并行和串行)。 首先...

    十种内部排序的算法比较

    (1) 对以下10种内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序、折半插入排序、二路插入排序、归并排序、基数排序。 (2) 待排序表的表长不小于100;其中的数据要用伪随机...

    数据结构课程设计(内部排序算法比较).

    数据结构课程设计中的内部排序算法比较是一个非常重要的主题。它主要涵盖了各种内部排序算法的特点、应用场景以及它们之间的性能差异等内容。 ### 内部排序算法概述 #### 什么是内部排序算法? 内部排序算法是指...

Global site tag (gtag.js) - Google Analytics