练习一下各种简单排序法:插入排序、选择排序、双向冒泡排序

来源:互联网 发布:筑巢seo忽悠 编辑:程序博客网 时间:2024/05/20 18:46


//插入排序
/*
#include<stdio.h>
#define MAX 1010
void simsort(int a[],int n)
{
  int key;
  for(int i=1;i<n;i++)
    {
      key=a[i];
      int j;
      for( j=i-1;j>=0;j--)
    {
      if(key<a[j])
        {
          a[j+1]=a[j];
        }
      else break;
    }
      a[j+1]=key;
    }
}
void display(int a[],int n)
{
  for(int i=0;i<n;i++)
    printf("%d ",a[i]);
}
int main()
{
  int a[]={5,6,2,1,0,5,7,3,9};
  int n=9;
  simsort(a,n);
  display(a,n);
  printf("/n");
  return 0;
}
*/
//选择排序法
/*
#include<stdio.h>
void swap(int *a,int *b)
{
  int t=*a;
  *a=*b;
  *b=t;
}
void selectSort(int a[],int n)
{
  int min;
  for(int i=0;i<n;i++)
    {
      min=i;
      for(int j=i;j<n;j++)
    {
      if(a[min]>a[j]) min=j;
    }
      swap(&a[min],&a[i]);
    }
}
void display(int a[],int n)
{
  for(int i=0;i<n;i++)
    printf("%d ",a[i]);
}
int main()
{
  int a[]={3,6,0,1,6,3,9,8,7,5,4};
  int n=11;
  selectSort(a,n);
  display(a,n);
  return 0;
}
*/
//双向冒泡排序法
/*
#include<stdio.h>
void swap(int *a,int *b)
{
  int t=*a;
  *a=*b;
  *b=t;
}
void dbuble(int a[],int n)
{
    int n2=n/2;

    int i;
  for( i=0;i<n2;i++)
    {
      printf("I=%d ",i);
      int j;
    int flag=0;
      for( j=0;j<n-i;j++)
    {
    if(a[j+1]<a[j])
      {
        swap(&a[j+1],&a[j]);
        flag=1;
      }

    }
      for(;j>0;j--)
    {
      if(a[j]<a[j-1]) swap(&a[j],&a[j-1]);
    }
      if(!flag) break;
    }
  printf("i=%d ",i);
}
void display(int a[],int n)
{
  for(int i=0;i<n;i++)
    printf("%d ",a[i]);
}
int main()
{
  //  int a[]={3,6,0,1,6,3,9,8,7,5,4};
  int a[]={1,2,3,4,5,6,7,8,9,10,11};
  int n=11;
  dbuble(a,n);
  display(a,n);
  printf("/n");
  return 0;
}
*/

原创粉丝点击