数据排序

此例中使用两重循环来实现排序。但是值得注意的是以上程序执行时元素的交换并不都是必须的。
数据排序 #include  < stdio.h >
数据排序#include 
< conio.h >
数据排序
#define  N 10
数据排序
void  main()
数据排序
{
数据排序  
int i,j,t;
数据排序  
int a[N];
数据排序  clrscr();
数据排序  
for(i=0;i<N;i++)
数据排序    scanf(
"%d",&a[i]);
数据排序  
for(i=0;i<N-1;i++)
数据排序    
for(j=i+1;j<N;j++)
数据排序      
if(a[i]<a[j])
数据排序        
{
数据排序         t
=a[i];
数据排序         a[i]
=a[j];
数据排序         a[j]
=t;
数据排序        }

数据排序  printf(
"\n");
数据排序  
for(i=0;i<N;i++) printf("%-6d",a[i]);
数据排序}

数据排序
事实上,只要记住比较时大元素的位置,即序号,在内循环结束后做一次交换即可,从而提高程序执行的效率。
数据排序 #include  < stdio.h >
数据排序#include 
< conio.h >
数据排序
#define  N 10
数据排序
void  main()
数据排序
{
数据排序  
int i,j,t,k;
数据排序  
int a[N];
数据排序  clrscr();
数据排序  
for(i=0;i<N;i++)    scanf("%d",&a[i]);
数据排序  
for(i=0;i<N-1;i++)
数据排序    
{k=i;
数据排序     
for(j=i+1;j<N;j++)
数据排序       
if(a[k]<a[j]) k=j;
数据排序     
if(k!=i)
数据排序       
{
数据排序        t
=a[i];
数据排序        a[i]
=a[k];
数据排序        a[k]
=t;
数据排序       }

数据排序     }

数据排序  printf(
"\n");
数据排序  
for(i=0;i<N;i++) printf("%6d",a[i]);
数据排序}

数据排序

经过改进后的程序每选一个元素只交换一次,提高了程序执行效率。
***********************************************************
下面是另外一种排序方法:
数据排序 /*用冒泡法将8个数按由小到大排序*/
数据排序
/*冒泡法的基本思想是:相邻两数比较,若前面较大,则两数交换位置,直到最后一个元素被处理,
数据排序最大的元素就沉到最下面,即在最后一个元素位置。
*/

数据排序#include 
< stdio.h >
数据排序#include 
< conio.h >
数据排序
#define  N 80
数据排序
void  sort( int  b[], int  k);
数据排序
void  print( int  b[], int  k);
数据排序
void  main()
数据排序
{
数据排序  
int a[N];
数据排序  
int i,m;
数据排序  clrscr();
数据排序  printf(
"Input m(<80):");
数据排序  scanf(
"%d",&m);
数据排序  printf(
"Input numbers:");
数据排序  
for(i=0;i<m;i++)
数据排序    scanf(
"%d",&a[i]);
数据排序  sort(a,m);
数据排序  print(a,m);
数据排序}

数据排序
数据排序
void  sort( int  b[], int  k)
数据排序
{
数据排序  
int i,j,t,flag;
数据排序  
for(j=0;j<k-1;j++)
数据排序    
{
数据排序      flag
=0;
数据排序      
for(i=0;i<k-j-1;i++)
数据排序        
if(b[i]>b[i+1])
数据排序          
{
数据排序            t
=b[i];
数据排序            b[i]
=b[i+1];
数据排序            b[i
+1]=t;
数据排序            flag
=1;
数据排序          }

数据排序      
if(flag==0break;
数据排序    }

数据排序}

数据排序
数据排序
void  print( int  b[], int  k)
数据排序
{
数据排序  
int i;
数据排序  
for(i=0;i<k;i++)
数据排序  
{
数据排序    
if(i%4==0) putchar('\n');
数据排序    printf(
"%-6d",b[i]);
数据排序  }

数据排序}

****************************************************
用指针实现选择法排序
数据排序 #include  " stdio.h "
数据排序#include 
" conio.h "
数据排序#include 
" string.h "
数据排序
数据排序
void  main()
数据排序
{
数据排序    
int data[8],i,*p1,*p2,temp;
数据排序    p1
=data;                   /*p1指向数组data的第一个元素*/
数据排序    printf(
"Input 8 numbers:");
数据排序    
for(i=0;i<8;i++)
数据排序    
{
数据排序        scanf(
"%d",p1);
数据排序        p1
++;
数据排序    }

数据排序
数据排序    
for(p1=data;p1<data+8-1;p1++)   /*排序从p1指向第一个元素开始,到第n-1个元素结束*/
数据排序        
for(p2=p1+1;p2<data+8;p2++)
数据排序            
if(*p1<*p2)             /*选择比较从p1+1开始,到最后一个元素结束*/
数据排序            
{temp=*p1;*p1=*p2;*p2=temp;}
数据排序    
for(i=0,p1=data;i<8;i++,p1++)
数据排序        printf(
"%6d",*p1);
数据排序    getch();
数据排序}

你可能感兴趣的:(排序)