当前位置:编程学习 > C/C++ >>

排序算法--排序算法汇总

排序算法无疑是学习数据结构中的重点内容,本文将给出排序算法的汇总。
下面是具体的实现:
[cpp] 
#include<stdio.h>  
#include<stdlib.h>  
#include<time.h>  
  
#define N 1000000  
  
int Array[N];  
int Temp[N];  
  
//1、冒泡排序  
void BubbleSort(int a[],int n){  
    int i,j;  
    int temp;  
    int tag;  
  
    for(i=n-1;i>0;i--){  
        tag = 0;  
        for(j=0;j<i;j++)  
              if(a[j]>a[j+1]){  
                  temp=a[j];  
                  a[j]=a[j+1];  
                  a[j+1]=temp;  
                  tag=1;  
                  }  
        if(tag==0) break;  
        }  
  
    }  
  
//2、简单插入排序  
void SimpleInsertSort(int a[],int n){  
    int i,j,k;  
    int temp;  
  
    for(i=1;i<n;i++){  
        for(j=0;j<i;j++)  
               if(a[j]>a[i]){  
                   k=j;  
                   break;  
                   }  
        if(j==i) continue;  
        temp=a[i];  
        for(j=i;j>k;j--)  
               a[j]=a[j-1];  
        a[k]=temp;  
        }  
    }  
  
//3、希尔排序  
void ShellSort(int a[],int n,int d){  
    int h,i,j,k;  
    int temp;  
  
    do{  
        d=d/3+1;  
        for(h=0;h<d;h++)  
               for(i=h+d;i<n;i+=d){  
                   for(j=h;j<i;j+=d)  
                          if(a[j]>a[i]){  
                              k=j;  
                              break;  
                              }  
                    if(j==i) continue;  
                    temp=a[i];  
                    for(j=i;j>k;j-=d)  
                           a[j]=a[j-d];  
                    a[k]=temp;  
                   }  
        }while(d>1);  
    }  
  
//4、简单选择排序  
void SimpleSelectSort(int a[],int n){  
    int i,j,k;  
    int temp;  
    for(i=0;i<n;i++){  
        temp=a[i];  
        k=i;  
        for(j=i+1;j<n;j++)  
               if(a[j]<temp){  
                   temp=a[j];  
                   k=j;  
                   }  
        if(k!=i){  
            temp=a[i];  
            a[i]=a[k];  
            a[k]=temp;  
            }  
        }  
    }  
  
//5、堆排序  
void CreateHeap(int a[],int n){  
    int i,j;  
    int temp;  
  
    for(i=(n-2)/2;i>=0;i--){  
        j=2*i+1;  
        while(j<n){  
            if(j+1<n&&a[j+1]>a[j])  
                 j++;  
            if(a[(j-1)/2]<a[j]){  
                temp=a[(j-1)/2];  
                a[(j-1)/2]=a[j];  
                a[j]=temp;  
                }  
            else break;  
             j=2*j+1;  
            }  
        }  
    }  
  
void HeapAdjust(int a[],int n){  
    int i=0;  
    int j;  
    int temp;  
    while(i<n&&2*i+1<n){  
        j=2*i+1;  
        if(j+1<n&&a[j+1]>a[j])  
            j++;  
  
        if(a[i]<a[j]){  
            temp=a[i];  
            a[i]=a[j];  
            a[j]=temp;  
            }  
        else break;  
        i=j;  
        }  
    }  
补充:软件开发 , C++ ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,