排序算法(一)

#include<stdio.h>
 
#define SWAP(x,y) {int t;t=x;x=y;y=t;}
 
//选择排序法:
/*
将要排序的对象最为两部分,一部分是已排序的,一部分是未排序的;
每次从未排序的部分中找出最小值,放入已排序的后面
*/
 
int  *SelectionSort( int  *p, int  num)
{
     int  i,j,index_min,temp;
      
     for (i=0;i<num-1;i++)
     {
         index_min = i;   
         for (j=i+1;j<num;j++)    //未排序部分中寻找最小值
         {
             if (*(p+j)<*(p+index_min))
             {
                 index_min=j;
             }
     }
             if (index_min!=i)
             {
         SWAP(*(p+i),*(p+index_min));
             }
     }
         return  p;
}
 
//插入排序法:
/*将对象分为两堆,每次取后面一堆中最靠前的元素插入到前面的合适位置*/
int  *InsertionSort( int  *p, int  num)
{
     int  i,j,k,temp=0;
     for (i=1;i<num;i++)
     {
         temp = *(p+i); //依次取后面最靠前的数据
         j = i-1;
         while (temp<*(p+j)) //注意体会次循环的巧妙
         {
             *(p+j+1) = *(p+j);
             j--;
             if (-1 == j)
                 break ;
         }
         *(p+j+1) = temp;
     }
     return  p;
}
 
//冒泡排序法:
/*一次循环比较相邻元素*/
int  *BubbleSort( int  *p, int  num)
{
     int  i,j,temp;
     temp = p[0];
     for (i=0;i<num-1;i++)
     {
         for (j=0;j<num;j++)
         {
             if (p[j]<p[j+1])
             {
                 SWAP(p[j+1],p[j]);
             }
         }
     }
         return  p;
}
     
int  main()
{
     int  i,num[10]={3,45,67,1,2,0,35,70,21,10},*ptr;
     int  length =10;
//  ptr = SelectionSort(num,length);
//  ptr = InsertionSort(num,length);
     ptr = BubbleSort(num,length);
     for (i=0;i<length;i++)
     {
         printf ( "%d " ,*(ptr+i));
     }
     return  0;
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值