C语言

1,#include"stdio.h"

int main()

{

/*为什么要声明成 char* ArrayName[5]; 而非char*】 ArrayName[];

因为:

char*a是一个指向字符对象bai的du指针,

该对象可以是一个字符zhi,也可以是字符串dao(即字符数zhuan组);

而char a[]则是定义了一个元素个数不定的字符数组;具体来说,初始化时都可以说:

char*a="asdasd";

char a[]=asdasd";

但是定义之后,*a可以将字符串整体赋给他,而char[]则不行,如*a="asdasww";是对的,

但a[]="asdasww";绝对是不允许的!*/

 

char* ArrayName[5]; /*字符指针数组*/

int index; /*循环控制变量*/

ArrayName[0]="WangJiasheng"; /*为数组元素赋值*/

ArrayName[1]="LiuWen";

ArrayName[2]="SuYuqun";

ArrayName[3]="LeiYu";

ArrayName[4]="ZhangMeng";

for(index=0;index<5;index++) /*使用循环显示名称*/

{

printf("%s\n",ArrayName[index]);

}

 

return 0;

}

  1. 选择排序

 

#include <stdio.h>

int main()

{

int i,j;

int a[10];

int iTemp;

int iPos;

printf("为数组元素赋值:\n");

/*从键盘为数组元素赋值*/

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

{

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

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

}

/*从小到大排序*/

for(i=0;i<9;i++) /*设置外层循环为下标0~8的元素*/

{

iTemp = a[i]; /*设置当前元素为最小值*/

iPos = i; /*记录元素位置*/

for(j=i+1;j<10;j++) /*内层循环i+1到9*/

{

if(a[j]<iTemp) /*如果当前元素比最小值还小*/

{

iTemp = a[j];   /*重新设置最小值*/

iPos = j; /*记录元素位置*/

}

}

/*交换两个元素值*/

a[iPos] = a[i];

a[i] = iTemp;

}

 

/*输出数组*/

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

{

printf("%d\t",a[i]); /*输出制表位*/

if(i == 4) /*如果是第5个元素*/

printf("\n"); /*输出换行*/

}

 

return 0; /*程序结束*/

}

  1. 冒泡

#include<stdio.h>

#include <iostream.h>

int main()

{

int i,j;

int a[10];

int iTemp;

printf("为数组元素赋值:\n");

/*从键盘为数组元素赋值*/

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

{

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

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

}

/*从小到大排序*/

for(i=1;i<10;i++) /*外层循环元素下标为1~9*/

{

for(j=9;j>=i;j--) /*内层循环元素下标为i~9*/

{

if(a[j]<a[j-1]) /*如过前一个数比后一个数大*/

{

/*交换两个数组元素的值*/

iTemp  = a[j-1];

a[j-1] = a[j];

a[j]   = iTemp;

}

}

}

 

/*输出数组*/

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

{

printf("%d\t",a[i]); /*输出制表位*/

if(i == 4) /*如果是第5个元素*/

printf("\n"); /*输出换行*/

}

 

return 0; /*程序结束*/

}

 

4,交换法排序

#include <stdio.h>

int main()

{

int i,j;

int a[10];

int iTemp;

printf("为数组元素赋值:\n");

/*从键盘为数组元素赋值*/

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

{

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

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

}

/*从小到大排序*/

for(i=0;i<9;i++) /*外层循环元素下标为0~8*/

{

for(j=i+1;j<10;j++) /*内层循环元素下标为i+1到9*/

{

if(a[j] < a[i]) /*如果当前值比其他值大*/

{

/*交换两个数值*/

iTemp = a[i];

a[i]  = a[j];

a[j]  = iTemp;

}

}

}

 

/*输出数组*/

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

{

printf("%d\t",a[i]); /*输出制表位*/

if(i == 4) /*如果是第5个元素*/

printf("\n"); /*输出换行*/

}

 

return 0; /*程序结束*/

}

  1. 插入

 

#include <stdio.h>

int main()

{

int i;

int a[10];

int iTemp;

int iPos;

printf("为数组元素赋值:\n");

/*从键盘为数组元素赋值*/

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

{

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

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

}

 

/*从小到大排序*/

for(i=1;i<10;i++) /*循环数组中元素*/

{

iTemp = a[i]; /*设置插入值*/

iPos = i-1;

while((iPos>=0) && (iTemp<a[iPos])) /*寻找插入值的位置*/

{

a[iPos+1] = a[iPos]; /*插入数值*/

iPos--;

}

a[iPos+1] = iTemp;

}

 

/*输出数组*/

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

{

printf("%d\t",a[i]); /*输出制表位*/

if(i == 4) /*如果是第5个元素*/

printf("\n"); /*输出换行*/

}

 

return 0; /*程序结束*/

}

5,

折半法

#include <stdio.h>

 

void CelerityRun(int left, int right, int array[]);

 

int main()

{

int i;

int a[10];

printf("为数组元素赋值:\n");

/*从键盘为数组元素赋值*/

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

{

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

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

}

 

/*从小到大排序*/

CelerityRun(0,9,a);

 

/*输出数组*/

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

{

printf("%d\t",a[i]); /*输出制表位*/

if(i == 4) /*如果是第5个元素*/

printf("\n"); /*输出换行*/

}

 

return 0; /*程序结束*/

}

 

void CelerityRun(int left, int right, int array[])

{

int i,j;

int middle,iTemp;

i = left;

j = right;

middle = array[(left+right)/2];  /*求中间值*/

do

{

while((array[i]<middle) && (i<right)) /*从左找小于中值的数*/

i++;      

while((array[j]>middle) && (j>left)) /*从右找大于中值的数*/

j--;

if(i<=j) /*找到了一对值*/

{

iTemp = array[i];

array[i] = array[j];

array[j] = iTemp;

i++;

j--;

}

}while(i<=j); /*如果两边的下标交错,就停止(完成一次)*/

 

/*递归左半边*/

if(left<j)

CelerityRun(left,j,array);

/*递归右半边*/

if(right>i)

CelerityRun(i,right,array);

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值