注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

Oracle专业打杂

定会重回巅峰……

 
 
 

日志

 
 

排序算法  

2011-05-29 10:00:20|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

冒泡排序 :

void bubble_sort(int array[],int n)
  {
  int i,j,flag,temp;
  for(i = 0; i < n-1; i++)
  {
  flag = 1;
  for(j = 0; j < n-i-1; j++)
  {
  if(array[j] > array[j+1])
  {
  temp = array[j];
  array[j] = array[j+1];
  array[j+1] = temp;
  flag = 0;
  }
  }
  if(1 == flag)
  break;
  printf("%d ",i);
  }
  return;
  }

 

选择法排序原理:一次选定数组中的每一个数,记下当前位置并假设它是从当前位置开始后面数中的最小数min=i,从这个数的下一个数开始扫描直到最后一个数,并记录下最小数的位置min,扫描结束后如果min不等于i,说明假设错误,则交换min与i位置上数。 具体实现代码如下:

#include<stdio.h>
/****************************************
**选择排序法对十个整数进行排序        ***
****************************************/
//n为数组长度;
void sort(int a[],int n)
{
   int temp,min;
   for(int i=0;i<n;i++)
   {
     min=i;//先假设最小下标为i
     for(int j=i+1;j<n;j++)
        if(a[j]<a[min])
           min=j;//对i之后的数进行扫描将最小的数赋予min
     if(min!=i)
     {
       temp=a[i];
       a[i]=a[min];
       a[min]=temp;
     }//判断min与i是否相等,若=则说明原假设正确反之交换数值
   }
}
//用main函数验证
void main()
{
 int a[10];
 printf("please input the array a:\n");
 for(int i=0;i<10;i++)
  scanf("%d",&a[i]);
 sort(a,10);

    for(i=0;i<10;i++)
  printf("%d\t",a[i]);
}

插入排序:

void insertion_sort(int array[], unsigned int first, unsigned int last)
  {
  int i,j;
  int temp;
  for (i = first+1; i<=last;i++)
  {
  temp = array[i];
  j=i-1;
  //与已排序的数逐一比较, 大于temp时, 该数移后
  while((j>=first) && (array[j] > temp))
  {
  array[j+1] = array[j];
  j--;
  }
  array[j+1] = temp;
  }
  }

排序有很多种,上次有介绍一种堆排序,这次说的是冒泡排序。
      思路:冒牌排序的想法是从一系列数中a[n],从尾段a[n-1]开始,如果它小于它前面的那个数("倒二个"数a[n-2]),则与之交换顺序,然后"倒二个"数再与"倒三个"数a[n-2],相比,如果a[n-1]<a[n-2],则再交换,如此继续,直至跟a[0]比较,这样就可以保证a[0]是所有数中最小的一个。重复上述的步骤,得a[1]为第二小.....a[n]为最大的数。

算法的代码如下:

void bubble(int first,int end) //冒泡排序

 {

          for(int flag=first;flag<end;flag++)

                  for(int i=end;i>flag;i--)

                          if(a[i]<a[i-1])

                          {

                                 int t=a[i];

                                 a[i]=a[i-1];

                                 a[i-1]=t;

                          }

 }


 

你可以增加相应的main()函数,调用bubblesort(),就可以运行了


 

  评论这张
 
阅读(81)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017