zoukankan      html  css  js  c++  java
  • 排序算法

    数据结构_排序总结-MarchOn

    稳定性:

    注:相等元素不交换

    稳定:冒泡、插入、归并、基数

    不稳定:选择、快速、堆、希尔

    实现:

    希尔排序:

     1 void shellSort(int v[],int n)
     2 {
     3     int gap,i,j,tmp;
     4     for(gap=n/2;gap>0;gap/=2)
     5     {
     6         for(i=gap;i<n;i++)
     7         {
     8             for(j=i-gap;j>=0 && v[j]>v[j+gap];j-=gap)
     9             {
    10                 tmp=v[j];
    11                 v[j]=v[j+gap];
    12                 v[j+gap]=tmp;
    13             }
    14         }
    15     }
    16  } 

     快速排序:

    (这里提供四个实现,前两个实现以首元素为枢纽元,后两个实现可以指定枢纽元的位置,前两个实现可以看做是后两个实现的特例)

      1 void swap(int *a,int *b)
      2 {
      3     int tmp=*a;
      4     *a=*b;
      5     *b=tmp;
      6 }
      7 void quickSort1(int a[],int s,int e)//第一个元素作为枢纽元 
      8 {
      9     if(s>=e) return;
     10     int i=s+1;
     11     int j=e;
     12     while(1)
     13     {
     14         //若用do while循环,则  初始i=s;j=t+1;   do{i++;}while(!(a[i]>=a[s] || i==t));   do{j--;}while(!(a[j]<=a[s] || j==s));
     15         while(i<e && a[i]<a[s]) //或i<=e也可 
     16         {
     17             i++;
     18         }
     19         while(j>s && a[j]>a[s])//或j>=s也可 
     20         {
     21             j--;
     22         }
     23         
     24         if(i<j)
     25         {
     26             swap(&a[i],&a[j]);
     27         }
     28         else
     29         {
     30             break;
     31         }
     32     }
     33     swap(&a[s],&a[j]);
     34     quickSort1(a,s,j-1);
     35     quickSort1(a,j+1,e);
     36 }
     37 void quickSort2(int a[],int s,int e)//第一个元素作为枢纽元 
     38 {
     39     if(s>=e) return;
     40     int i=s;
     41     int j=s;
     42     while(++i <= e)
     43     {
     44         if(a[i]<a[s])
     45         {
     46             swap(&a[i],&a[++j]);
     47         }
     48     }
     49     swap(&a[s],&a[j]);
     50     quickSort2(a,s,j-1);
     51     quickSort2(a,j+1,e);
     52 }
     53 void quickSort3(int a[],int s,int e)//可以指定枢纽元 
     54 {
     55     if(s>=e) return;
     56     
     57     int pivot=(s+e)/2;//指定枢纽元
     58     
     59     int i=s;
     60     int j=e;
     61     while(1)
     62     {
     63         //若用do while循环,则  初始i=s-1;j=t+1;   do{i++;}while(!(a[i]>=a[pivot] || i==t));   do{j--;}while(!(a[j]<=a[pivot] || j==s));
     64         while(i<e && a[i]<a[pivot]) //或i<=e也可 
     65         {
     66             i++;
     67         }
     68         while(j>s && a[j]>a[pivot])//或j>=s也可 
     69         {
     70             j--;
     71         }
     72         
     73         if(i<j)
     74         {
     75             swap(&a[i],&a[j]);
     76             if(i==pivot) pivot=j;
     77             else if(j==pivot) pivot=i;
     78         }
     79         else
     80         {
     81             break;
     82         }
     83     }
     84     swap(&a[pivot],&a[i]);
     85     quickSort3(a,s,j-1);
     86     quickSort3(a,j+1,e);
     87 }
     88 
     89 void quickSort4(int a[],int s,int e)//可以指定枢纽元 
     90 {
     91     if(s>=e) return;
     92     
     93     int pivot=(s+e)/2;//指定枢纽元 
     94     
     95     int i=s-1;
     96     int j=s-1;
     97     while(++i <= e)
     98     {
     99         if(a[i]<a[pivot])
    100         {
    101             swap(&a[i],&a[++j]);
    102             if(pivot==j) pivot=i;
    103         }
    104     }
    105     swap(&a[pivot],&a[++j]);
    106     quickSort2(a,s,j-1);
    107     quickSort2(a,j+1,e);
    108 }
    View Code
  • 相关阅读:
    java 8
    内存溢出VS内存泄漏
    dubbo zk 分布式服务项目搭建与配置
    转发 VS 重定向
    过滤器
    Synchronized
    java 泛型
    spring 整合 mongo
    泛型
    反虚拟机
  • 原文地址:https://www.cnblogs.com/z-sm/p/4156526.html
Copyright © 2011-2022 走看看