Algorlthm:简单排序

来源:互联网 发布:汽车修理厂服务软件 编辑:程序博客网 时间:2024/05/27 19:25

                                                             选择排序 插入排序 气泡排序

      许久在考虑数据结构算法用什么语言最好实现,哈哈,忽然发现自己是在想一个可傻的问题。数据结构本身就是一种解决问题方法的科学,是一种思维,用什么工具都可以实现,对各种语言的内在思想不强调。闭嘴····

       复习了下简单的排序方法,算法思想。

          选择排序的对象分作两部分,一个是已经排好的,一个是为排好的,每一次排序从后面的为排好的选择一个最小值,放在前面已经排好的最后面。

          插入排序可以把数据分为两部分, 每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置,直到对象全部插入为止。

         气泡排序就是每次最大的元素如同气泡一样移动至右边,这样最大的元素会不断的都会移动向右边。

         下面为C程序实现:

 

 

#include<stdio.h>

#include<stdlib.h>
#include<time.h>

#define MAX 10
#define SWAP(x,y) {int t; t= x; x= y; y = t;}

void selsort(int[]);
void insort(int[]);
void bubsort(int[]);

int main(void)
{

 int number[MAX] = {0};
 int i;
 printf("**********************************************\n");
 srand(time(NULL));                                         //产生不同的随机数种子
 printf("排序前:");
 for(i= 1;i<=MAX;i++)
 {
  number[i] = rand()/1000;
  printf("%3d\t",number[i]);
 }
 printf("\n请选择排序方式:\n");
 printf("(1)选择排序 (2)插入排序 (3)冒泡排序\n (0)退出\n");

 scanf("%d",&i);

 switch(i)
 {
  case 1: selsort(number); break;
  case 2: insort(number);  break;
  case 3: bubsort(number); break;
  case 0: exit(0);         break;
  default: printf("选项错误(0-3)!!!");
 }
 return 0;
 
}
void selsort( int number[])      //选择排序
{
 int i,j,k,m;

 for(i = 1; i<MAX; i++)
 {
  m=i;                                                        //假定第一个为最小
  for(j=i+1;j<MAX+1;j++)
   if(number[j]<number[m])
    m = j;                                                    //第i+1次从剩下的找出最小的

            if(i != m)
    SWAP(number[i],number[m])   
            printf("第%d次排序:",i);
   for(k = 0;k<MAX;k++)
   
    printf("%d ",number[k+1]);
   
   printf("\n");
  }
     main();
}
 
void insort(int number[])                         //插入排序
{
 int i, j, k;

 for(j = 2;j<=MAX;j++)
 {
  number[0] = number[j];
  i = j-1;
  while(number[0]<number[i])
  {
   number[i+1] = number[i];
   i--;
   if(i == -1)
    break;
  }
  number[i+1] = number[0];

  printf("第%d次排序:",j);
  for(k = 1;k<=MAX;k++)
   printf("%d  ",number[k]);
  printf("\n");
 }
 main();
}

 

void bubsort(int number[])                        //气泡排序

 int i, j, k, flag = 1;
 
 for(i = 0;i<MAX&&flag ==1;i++)
 {
  flag = 0;
  for(j=1;j<MAX-i;j++)                                  //次数>0  <n-1
  {

   if(number[j+1]<number[j])
   {
    SWAP(number[j+1],number[j]);
    flag = 1;
   }
  }

 printf("第%d次排序:",i+1);
 for(k=0;k<MAX;k++)
  printf("%d ",number[k]);
 printf("\n");
 }
 main();
}

 

选择排序实现:


 

插入排序实现:

 

冒泡排序实现: