手写基础排序及查找算法

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhq9695/article/details/81008222

目录

冒泡排序

插入排序

选择排序

快速排序

归并排序

二分查找


冒泡排序

void bubble_sort(int a[],int n){
  int t;
  for(int i=n-1;i>=0;i--)
    for(int j=0;j<i;j++)
      if(a[j]>a[j+1]){
        t=a[j];a[j]=a[j+1];a[j+1]=t;
      }
}

插入排序

void insert_sort(int a[],int n){
  int t,j;
  for(int i=1;i<n;i++){
    t=a[i];
    for(j=i-1;j>=0&&a[j]>t;j--)
      a[j+1]=a[j];
    a[j+1]=t;
  }
}

选择排序

void select_sort(int a[],int n){
  int minn,t;
  for(int i=0;i<n;i++){
    minn=i;
    for(int j=i+1;j<n;j++)
      if(a[j]<a[minn])minn=j;
    t=a[i];a[i]=a[minn];a[minn]=t;
  }
}

快速排序

void quick_sort(int a[],int l,int r){
  if(l>=r)return;
  int i=l,j=r-1,x=a[i];
  while(i<j){
    while(a[j]>=x&&i<j)j--;
    a[i]=a[j];
    while(a[i]<=x&&i<j)i++;
    a[j]=a[i];
  }
  a[i]=x;
  quick_sort(a,l,i);
  quick_sort(a,i+1,r);
}

归并排序

// 头尾包括
void merge(int a[],int b[],int l,int m,int r){
  int i=l,j=m+1,k=0;
  while(i<=m&&j<=r){
    if(a[i]>a[j])b[k++]=a[j++];
    else b[k++]=a[i++];
  }
  while(i<=m)b[k++]=a[i++];
  while(j<=r)b[k++]=a[j++];
  for(int i=0;i<k;i++)
    a[i+l]=b[i];
}

void merge_sort(int a[],int b[],int l,int r){
  if(l<r){
    int m=(l+r)/2;
    merge_sort(a,b,l,m);
    merge_sort(a,b,m+1,r);
    merge(a,b,l,m,r);
  }
}

二分查找

int binary_find(int a[],int l,int r,int key){
  int low=l,high=r-1,mid;
  while(low<high){
    mid=(low+high)/2;
    if(a[mid]>key)
      high=mid-1;
    else if(a[mid]<key)
      low=mid+1;
    else
      return mid;
  }
  return -1;
}

猜你喜欢

转载自blog.csdn.net/zhq9695/article/details/81008222