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;
}
-
选择排序
#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; /*程序结束*/
}
-
冒泡
#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; /*程序结束*/
}
-
插入
#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);
}