一维数组的四个算法.ppt
一维数组的四个算法,排序查找插入删除,程序举例2:用起泡法对10个数排序(由小到大)。,起泡法的思路是:将相邻两个数比较,将小的调到前头。,排序过程:(1)比较第一个数与第二个数,若为逆序0a1,则交换;然后比较第二个数与第三个数;依次类推,直至第n-1个数和第 n个数比较为止第一趟冒泡排序,结果最大的数被安置在最后一个元素位置上;(2)对前n-1个数进行第二趟冒泡排序,结果使次大的数被安置在第n-1个元素位置;(3)重复上述过程,共经过n-1趟冒泡排序后,排序结束。,例,38,49,76,97,13,97,27,97,30,97,13,76,76,76,27,30,13,65,27,65,30,65,13,13,49,49,30,49,27,38,27,38,30,38,#include void main()int a10;int i,j,t;printf(input 10 numbers:n);for(i=0;iai+1)t=ai;ai=ai+1;ai+1=t;printf(the sorted numbers:n);for(i=0;i10;i+)printf(%d,ai);printf(n);,程序运行结果如下:input 10 numbers:1 0 4 8 12 65-76 100-45 123the sorted numbers:-76-45 0 1 4 8 12 65 100 123,例 用简单选择法对10个数排序,排序过程:(1)首先通过n-1次比较,从n个数中找出最小的,将它与第一个数交换第一趟选择排序,结果最小的数被安置在第一个元素位置上;(2)再通过n-2次比较,从剩余的n-1个数中找出关键字次小的记录,将它与第二个数交换第二趟选择排序;(3)重复上述过程,共经过n-1趟排序后,排序结束。,例,初始:49 38 65 97 76 13 27,i=1,13,49,一趟:13 38 65 97 76 49 27,i=2,27,38,六趟:13 27 38 49 65 76 97,#include void main()int a11,i,j,k,x;printf(Input 10 numbers:n);for(i=1;i11;i+)scanf(%d,查找:顺序查找 折半查找:元素已排好序,13253647586971 查找x=69,if(x=amid)else if(xamid)top=mid+1;else bot=mid-1;,#include#define N 10void main()int aN,top,mid,bot,find=0,x;printf(Input%d numbers:n,N);for(i=0;iN;i+)scanf(%d,删除:从一组数中删除一个给定数据x,1251348563972 x=56,for(i=0;iN;i+)if(x=ai)p=i;break;for(i=p;iN-1;i+)或:for(i=p+1;iN;i+)ai=ai+1;ai-1=ai;,思考:如果要删除的x在原数组中不止一个,把所有的都删除,程序该如何写?,#include#define N 10void main()int aN,i,x,p;printf(Input%d numbers:n,N);for(i=0;iN;i+)scanf(%d,插入:将一个给定数据x插入到一个已排好序的数组中,要求插入后原数组仍然有序。,12356789插入x=4,1.找插入位置p2.将p及其后的数据依次后移3.将x赋值给ap注意:数组定义要大一些,#include#define N 10void main()int aN+1,i,x,p;printf(Input%d numbers:n,N);for(i=0;i=p;i-)ai+1=ai;ap=x;for(i=0;iN+1;i+)printf(%d,ai);printf(n);,