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