数据结构基本算法大全

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法

/***冒泡算法思想:两个泡泡,大的在后面,小的在后面***/

#include

void bubble(int a[],int n)

{

int temp=0;

int lastexchange=0; /***传递边界***/

int border=n-1;

for(int i=0;i

{

bool sort=true;

for(int j=0;j

{

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

{

temp=a[j];

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

a[j+1]=temp;

sort=false; /***两两交换,还得工作***/

lastexchange=j; /***新的边界,解决了不在遍历全部元素,而是从最后交换那个位置开始***/

}

}

border=lastexchange; /***给它新的边界***/

if(sort) /***sort==trune才做,每一轮循环如果有交换用里面的false,如果哪一次循环一次都没有交换那么就不会执行交换,用外面的true,就退出循环***/

{

break;

}

}

}

int main()

{

int a[10],i;

printf("请输入10个整数:\n");

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

{

scanf("%d",&a[i]);

}

bubble(a,10);

printf("bubble后:\n");

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

{

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

}

printf("\n");

}

/***插入排序思想:把它看作摸牌过程。首先手里面有一张牌,所以i=1;摸第二张牌时和手里牌比较,比第一张牌小则往前,摸第二张牌,和前面两张牌比较,比他们都小则

移动到最前面,剩下两张牌向后移动。***/

#include

void insert(int a[],int n)

{

int temp,i,j;

for(i=1;i

{

temp=a[i];

j=i-1;

while(j>=0&&temp

{

a[j+1]=a[j--]; /***利用j--先用后赋值的力量***/

a[j+1]=temp; /***此时j--赋值了***/

}

}

}

main()

{

int i,a[10];

printf("请输入10个整数\n");

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

{

scanf("%d",&a[i]);

}

printf("the array is:\n");

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

{

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

}

insert(a,10);

printf("排序后:\n");

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

{

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

}

printf("\n");

}

/*顺序查找思想:把查找的数从头至尾***/ #include

int find(int *ListSep,int ListLength,int Keydata) {

int temp=0;

int length=ListLength;

for(int i=0;i

{

if(ListSep[i]==Keydata)

return i;

}

return 0;

}

int main()

{

int TestData[5]={34,67,1,47,8};

int reData=find(TestData,5,47);

printf("reData:%d\n",reData);

return 0;

}

/***算法思想:分而治之,挖坑填数。初始i=0;j=9;x=a[i]=?,由于已经将a[0]中的数保存在x中,可以理解成在数组a[0]上挖了一个坑,可以将其它数据填充到这里***/

#include

void quick(int a[],int l,int r)

{

if(l

{

int i=l,j=r,x=a[l]; /***l,r的生存期是大if结束***/

while(i

{

while(i=x) /*这里的while循环,当找到a[j]

j--;

if(i

相关文档
最新文档