| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 493 人关注过本帖
标题:我做的数组排列 为什么不行???
只看楼主 加入收藏
martyxu
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2010-4-22
结帖率:71.43%
收藏
已结贴  问题点数:15 回复次数:5 
我做的数组排列 为什么不行???
数组numbers[10] = { 82, 47, 2, 29, 95, 15, 38, 66, 51, 72 }
把它按从小到大的顺序排列一下
以下是我做的程序
为什么结果变成了2 15 29 38 47 95 82 66 51 72
而不是 2 15 29 38 47  51 66 72 82 95 呢?

#include <stdio.h>

int main()
{
  int numbers[10] = { 82, 47, 2, 29, 95, 15, 38, 66, 51, 72 };
  int i,j,temp;
 
  for(i=0;i<10-i;i++)
  {
    for(j=i+1;j<10;j++)
      if(numbers[i]>numbers[j]){
      temp=numbers[i];
      numbers[i]=numbers[j];
      numbers[j]=temp;
      }
  }
  for(i=0;i<10;i++)
  printf("%i ",numbers[i]);
  return 0;
}
 
搜索更多相关主题的帖子: 排列 
2010-07-21 10:35
flyingcat
Rank: 4
来 自:HDU
等 级:业余侠客
威 望:2
帖 子:55
专家分:230
注 册:2010-7-18
收藏
得分:10 
程序代码:
#include <stdio.h>

int main()
{
  int numbers[10] = { 82, 47, 2, 29, 95, 15, 38, 66, 51, 72 };
  int i,j,temp;

  for(i=0;i<10;i++)//这里纠正一下,不是到10-i,到10就行了,不过整段代码还是可以再优化一下的
  {
    for(j=i+1;j<10;j++)
      if(numbers[i]>numbers[j]){
      temp=numbers[i];
      numbers[i]=numbers[j];
      numbers[j]=temp;
      }
  }
  for(i=0;i<10;i++)
  printf("%i ",numbers[i]);
  return 0;
}
2010-07-21 10:43
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:5 
c语言中排序的实现方法有好几种.可以到百渡上去搜,会有不少答案的.给你提供几个.希望对你有帮助.

这是冒泡法的程序:
#include<stdio.h>
void sort(int array[],int size)
{
int i,j,temp;
/*下面是利用相邻的比较,把大的数放到上面;*/
for(i=0;i<size-1;i++)
        for(j=i+1;j<size;j++)
               if(array[i]>array[j])
               {
                      temp=array[i];
                      array[i]=array[j];
                      array[j]=temp;
               }
}
void main()
{
int i;
int a[10]={1,33,78,34,787,213,132,35,32,21};
sort(a,10);
for(i=0;i<10;i++)
        printf("%6d",a[i]);
}

这是选择法的程序:
#include<stdio.h>
void sort(int array[],int size)
{
int i,j,k,temp;
for(i=0;i<size-1;i++)
{
        k=i;
/*把最小的那一个数找出来,并且用a[k]记下来,然后与a[i]交换;*/
        for(j=i+1;j<size;j++)
               if(array[k]>array[j])
                      k=j;
        temp=array[k];
        array[k]=array[i];
        array[i]=temp;
}
}
void main()
{
int a[]={12,43,54,23,32,65,87,2,34,54};
int i;
sort(a,10);
for(i=0;i<10;i++)
        printf("%d ",a[i]);
}
这是一个快速排序的程序:
#include<stdio.h>
void quick_sort(int array[],int first,int last)//first,last分别为数组下标的范围;
{
int temp,low,high,list_separator;
low=first;
high=last;
/*下面是比较数组中的大小,把数组中的数与中间数比较,大的放在后半部分,比中间数小的放在前半部分,*/
    list_separator=array[(first+last)/2];//中间数;
do{
        while(array[low]<list_separator)//中间数与前半部分比较;
               low++;
        while(array[high]>list_separator)// 中间数与后半部分比较;
               high--;
        if(low<=high)//前半部分与后半部分交换;
        {
               temp=array[low];
               array[low++]=array[high];
               array[high--]=temp;
        }
}while(low<=high);
if(first<high)
        quick_sort(array,first,high);//利用递归的办法,实行循环;
if(low<last)
        quick_sort(array,low,last);//利用递归的办法,实行循环;
}
void main()
{
int a[9]={12,23,34,65,93,32,21,9,8};
quick_sort(a,0,8);
for(int i=0;i<9;i++)
        printf("%d ",a[i]);
printf(" ");
}
这是一个希尔排序的程序:
#include<stdio.h>
void shell_sort(int array[],int size)
{
int temp,gap,i,flag;
gap=size/2;
do{
        do{
               flag=0;/*利用标记,使前半部分与后半部分的数都对应比较过,前半部分大于后半部分的交换,直到都比较过,并且前半部分的数小于与前部分一一对应的后部分的数时,退出while循环*/
               for(i=0;i<size-gap;i++)
                      if(array[i]>array[i+gap])
                      {
                             temp=array[i];
                             array[i]=array[i+gap];
                             array[i+gap]=temp;
                          flag=1;
                      }
        }while(flag);
}while(gap=gap/2);
}
void main()
{
int array[]={1,2,32,43,64,7654,321,42,23,97,56,32,78,45,32},i;
shell_sort(array,15);
for(i=0;i<15;i++)
        printf("%10d",array[i]);
}

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-21 10:46
sunyh1999
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:14
帖 子:1178
专家分:3032
注 册:2009-5-17
收藏
得分:0 
LZ可以看看,参考一下

欢迎来到我的博客:http://blog..cn/noisunyuhong
2010-07-21 13:25
martyxu
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2010-4-22
收藏
得分:0 
以下是引用sunyh1999在2010-7-21 13:25:49的发言:

LZ可以看看,参考一下
谢谢你 大哥
2010-07-21 21:02
martyxu
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2010-4-22
收藏
得分:0 
以下是引用flyingcat在2010-7-21 10:43:08的发言:

 
#include  
 
int main()
{
  int numbers[10] = { 82, 47, 2, 29, 95, 15, 38, 66, 51, 72 };
  int i,j,temp;
 
  for(i=0;i<10;i++)//这里纠正一下,不是到10-i,到10就行了,不过整段代码还是可以再优化一下的
  {
    for(j=i+1;j<10;j++)
      if(numbers>numbers[j]){
      temp=numbers;
      numbers=numbers[j];
      numbers[j]=temp;
      }
  }
  for(i=0;i<10;i++)
  printf("%i ",numbers);
  return 0;
}
谢谢!
2010-07-21 21:03
快速回复:我做的数组排列 为什么不行???
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027221 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved