|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 linha0 于 2011-8-3 12:34 编辑
- #include <stdio.h>
- #include <malloc.h>
- #include <stdlib.h>
- #define ARRAY struct arrayInt
- //定义结构体
- struct arrayInt
- {
- int *array; //数组
- int count; //数组的个数
- };
- int main(void)
- {
- void setArrayInt(ARRAY *arr);
- void sort(ARRAY *arr,int k);
- ARRAY array;
- char ch;
- int k;
-
- do
- {
- //设置新的数组
- setArrayInt(&array);
-
- do
- {
- printf("\n\n0.从小到大排列\n");
- printf("1.从大到小排列\n");
- printf("请选择: ");
- scanf ("%d",&k);
-
- //对数组进行冒泡排序
- sort(&array,k);
-
- printf("\n是否重新选择排序方式(Y/N):");
- while(getchar()!='\n');
- scanf("%c",&ch);
- }while('y'==ch||'Y'==ch);
-
- free(array.array);
- printf("\n是否重新开始(Y/N):");
- while(getchar()!='\n');
- scanf("%c",&ch);
- }while('y'==ch||'Y'==ch);
-
- system("pause");
- return 0;
- }
- //输出数组
- void ArrIntPrint(int *ar,int n)
- {
- int i=0;
- for(;i<n;i++)
- {
- printf("%5d",*ar++);
- }
- printf("\n");
- }
- //检查是否输入数字
- void scanInt(int *n)
- {
- while(!scanf("%d",n))
- {
- printf("请输入数字!\n");
- while(getchar()!='\n');
- }
- }
- //设置要测试的数组
- void setArrayInt(ARRAY *arr)
- {
- int i=0;
-
- printf("请输入数组的元数个数:");
- scanInt(&arr->count);
- arr->array=(int *)malloc(sizeof(int)*arr->count);
-
- //设置数组元数。
- for(;i<arr->count;i++)
- {
- printf("请输入第%d个元数:",i);
- scanInt(arr->array+i);
- }
-
- printf("\n当前数组元数分别为:\n\n");
- ArrIntPrint(arr->array,arr->count);
- }
- //对数组进行排序
- void sort(ARRAY *arr,int k)
- {
- int *ai,*aj,i=0,j=0;
-
- if(k)
- {//冒泡算法1:降序排序
- for(;i<arr->count-1;i++)
- {
- ai=arr->array+i;
- for(j=i+1;j<arr->count;j++)
- {
- aj=arr->array+j;
- if(*ai<*aj)//符合条件就交换
- {
- *ai^=*aj;
- *aj^=*ai;
- *ai^=*aj;
- }
- }
- }
- printf("\n数组从大到小排列为:\n\n");
- }else
- {//冒泡算法2:升序排序
- for(;i<arr->count-1;i++)
- {
- for(j=0;j<arr->count-i-1;j++)
- {
- ai=arr->array+j;
- aj=arr->array+j+1;
- if(*ai>*aj)
- {
- *ai^=*aj;
- *aj^=*ai;
- *ai^=*aj;
- }
- }
- }
- printf("\n数组从小到大排列为:\n\n");
- }
-
- //输出已排序的数组
- ArrIntPrint(arr->array,arr->count);
- }
复制代码
|
|