一维数组的四个算法
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一维数组的四个算法
排序 查找 插入 删除
-----精品文档------
程序举例2:用起泡法对10个数排序(由小到大)。
起泡法的思路是:将相邻两个数比较,将小的调到前头。
排序过程: (1)比较第一个数与第二个数,若为逆序[0]>a[1], 则交换;然后比较第二个数与第三个数;依次类推,直 至第n-1个数和第 n个数比较为止——第一趟冒泡排序, 结果最大的数被安置在最后一个元素位置上; (2)对前n-1个数进行第二趟冒泡排序,结果使次大的 数被安置在第n-1个元素位置; (3)重复上述过程,共经过n-1趟冒泡排序后,排序结 束。
-----精品文档------
#include <stdio.h>
#define N 10 voi查d找ma:in( ) { i顺nt序a查[N找],top, mid, bot, find=0, x;
p折ri半nt查f(找"I:np元u素t 已%d排n好um序bers:\n" , N);
fporri(nit1=f30(;"ie2<n5Nt;eir3+6+)x:4"7);s5c8sacnaf6n(9f"(%"d7%"1d,"&,a&[xi)]查;);找x=69
1 v{2o5idi1mn3atina4([8N)],5i6, x3,9 p;72
x=56
for(i=0; i<pNr;init+f+()"Input %d numbers:\n" , N);
if(x=f=oar[(ii]=)0;i<{Np;=ii+;+)breaskc;a}nf("%d",&a[i]);
排序过程: (1)首先通过n-1次比较,从n个数中找出最小 的, 将它与第一个数交换—第一趟选择排序, 结果最小的数被安置在第一个元素位置上; (2)再通过n-2次比较,从剩余的n-1个数中找 出关键字次小的记录,将它与第二个数交换—第 二趟选择排序; (3)重复上述过程,共经过n-1趟排序后,排序 结束。
printf("enter x:"); scanf("%d",&x); for(i=p;i<fNo-r1(;ii=+0+;) i<N;或i:++)for(i=p+1;i<N;i++)
printf("\n"); }
程序运行结果如下: input 10 numbers:
1 0 4 8 12 65 -76 100 -45 123↙
the sorted numberwk.baidu.com: -76 -45 0 1 4 8 12 65 100 123
-----精品文档------
例 用简单选择法对10个数排序
五趟: 13 27 38 49 65 [97 76 ]
六趟: 13 27 38 49 65 76 [97 ]
-----精品文档------
#include <stdio.h> void main( ) { int a[11],i,j,k,x;
printf("Input 10 numbers:\n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); for(i=1;i<10;i++) { k=i;
printf("\n");
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{ t=a[i];a[i]=a[i+1]; a[i+1]=t; }
printf("the sorted numbers :\n");
for(i=0;i<10;i++) printf("%d ",a[i]);
}
elseelbsoet=mtiodp-1=;mid+1;
if(find==0) printf("%d is not found.\n", x);
else printf("%d is a[%d]\n", x, mid);
}
-----精品文档------
删除#:in从cl一ud组e 数<s中td删io除.h一> 个给定数据x #define N 10
printf("\n");
top=0to;pbot=N-1; mid
bot
while(top<=bot && find==0)
{if(imxfi=(d=x=a=([=tmaoi[pdm+])ibdo]t))/2f;ind=1;
elseelsief(x>iaf[(mxi<da])[mitdo]p)=mid+b1o;t=mid-1;
for(j=i+1;j<=10;j++) if(a[j]<a[k]) k=j;
if(i!=k) { x=a[i]; a[i]=a[k]; a[k]=x;} }
printf("The sorted numbers:\n"); for(i=1;i<11;i++) printf("%d ",a[i]); }
-----精品文档------
例 4398 38
3489 49
65 65
9776 7163
791673 127376 12937 327076
23970 3706 3907 97 初第 始一 关趟 键 n字=8
38 38 3183 13 49 4193 132387 27 6153 124379 23780 30 126375 234709 3308 38 236705 3409 49 3605 65 76
-----精品文档------
kk
k
例 i=1 初始: [ 4193 38 65 97 76 1439 27 ]
j jj jj j
k
k
i=2 一趟: 13 [3287 65 97 76 49 3287 ]
j j j jj 二趟: 13 27 [65 97 76 49 38 ]
三趟: 13 27 38 [97 76 49 65 ] 四趟: 13 27 38 49 [76 97 65 ]
第第第第 二三四五 趟趟趟趟
-----精品文档------
13 13 27 27 30
第第 六七 趟趟
#include <stdio.h>
void main( )
{ int a[10];
int i,j,t;
printf("input 10 numbers:\n");
for (i=0;i<10;i++) scanf("%d",&a[i]);
排序 查找 插入 删除
-----精品文档------
程序举例2:用起泡法对10个数排序(由小到大)。
起泡法的思路是:将相邻两个数比较,将小的调到前头。
排序过程: (1)比较第一个数与第二个数,若为逆序[0]>a[1], 则交换;然后比较第二个数与第三个数;依次类推,直 至第n-1个数和第 n个数比较为止——第一趟冒泡排序, 结果最大的数被安置在最后一个元素位置上; (2)对前n-1个数进行第二趟冒泡排序,结果使次大的 数被安置在第n-1个元素位置; (3)重复上述过程,共经过n-1趟冒泡排序后,排序结 束。
-----精品文档------
#include <stdio.h>
#define N 10 voi查d找ma:in( ) { i顺nt序a查[N找],top, mid, bot, find=0, x;
p折ri半nt查f(找"I:np元u素t 已%d排n好um序bers:\n" , N);
fporri(nit1=f30(;"ie2<n5Nt;eir3+6+)x:4"7);s5c8sacnaf6n(9f"(%"d7%"1d,"&,a&[xi)]查;);找x=69
1 v{2o5idi1mn3atina4([8N)],5i6, x3,9 p;72
x=56
for(i=0; i<pNr;init+f+()"Input %d numbers:\n" , N);
if(x=f=oar[(ii]=)0;i<{Np;=ii+;+)breaskc;a}nf("%d",&a[i]);
排序过程: (1)首先通过n-1次比较,从n个数中找出最小 的, 将它与第一个数交换—第一趟选择排序, 结果最小的数被安置在第一个元素位置上; (2)再通过n-2次比较,从剩余的n-1个数中找 出关键字次小的记录,将它与第二个数交换—第 二趟选择排序; (3)重复上述过程,共经过n-1趟排序后,排序 结束。
printf("enter x:"); scanf("%d",&x); for(i=p;i<fNo-r1(;ii=+0+;) i<N;或i:++)for(i=p+1;i<N;i++)
printf("\n"); }
程序运行结果如下: input 10 numbers:
1 0 4 8 12 65 -76 100 -45 123↙
the sorted numberwk.baidu.com: -76 -45 0 1 4 8 12 65 100 123
-----精品文档------
例 用简单选择法对10个数排序
五趟: 13 27 38 49 65 [97 76 ]
六趟: 13 27 38 49 65 76 [97 ]
-----精品文档------
#include <stdio.h> void main( ) { int a[11],i,j,k,x;
printf("Input 10 numbers:\n"); for(i=1;i<11;i++) scanf("%d",&a[i]); printf("\n"); for(i=1;i<10;i++) { k=i;
printf("\n");
for(j=0;j<9;j++)
for(i=0;i<9-j;i++)
if(a[i]>a[i+1])
{ t=a[i];a[i]=a[i+1]; a[i+1]=t; }
printf("the sorted numbers :\n");
for(i=0;i<10;i++) printf("%d ",a[i]);
}
elseelbsoet=mtiodp-1=;mid+1;
if(find==0) printf("%d is not found.\n", x);
else printf("%d is a[%d]\n", x, mid);
}
-----精品文档------
删除#:in从cl一ud组e 数<s中td删io除.h一> 个给定数据x #define N 10
printf("\n");
top=0to;pbot=N-1; mid
bot
while(top<=bot && find==0)
{if(imxfi=(d=x=a=([=tmaoi[pdm+])ibdo]t))/2f;ind=1;
elseelsief(x>iaf[(mxi<da])[mitdo]p)=mid+b1o;t=mid-1;
for(j=i+1;j<=10;j++) if(a[j]<a[k]) k=j;
if(i!=k) { x=a[i]; a[i]=a[k]; a[k]=x;} }
printf("The sorted numbers:\n"); for(i=1;i<11;i++) printf("%d ",a[i]); }
-----精品文档------
例 4398 38
3489 49
65 65
9776 7163
791673 127376 12937 327076
23970 3706 3907 97 初第 始一 关趟 键 n字=8
38 38 3183 13 49 4193 132387 27 6153 124379 23780 30 126375 234709 3308 38 236705 3409 49 3605 65 76
-----精品文档------
kk
k
例 i=1 初始: [ 4193 38 65 97 76 1439 27 ]
j jj jj j
k
k
i=2 一趟: 13 [3287 65 97 76 49 3287 ]
j j j jj 二趟: 13 27 [65 97 76 49 38 ]
三趟: 13 27 38 [97 76 49 65 ] 四趟: 13 27 38 49 [76 97 65 ]
第第第第 二三四五 趟趟趟趟
-----精品文档------
13 13 27 27 30
第第 六七 趟趟
#include <stdio.h>
void main( )
{ int a[10];
int i,j,t;
printf("input 10 numbers:\n");
for (i=0;i<10;i++) scanf("%d",&a[i]);