首页 > 代码库 > 排序算法总结

排序算法总结

关于排序算法的性能和稳定性总结,维基百科中文词条排序算法的总结很全面。

本文统一将数组从小到大排序。

1.插入排序

(1)直接插入排序,基本操作是将一个记录插入到已经排好序的的有序表中,从而得到一个新的,记录数曾1的有序表。

void InsertSort(int a [], int size){  int i,j,temp;  for(i = 1; i < size; i++){    temp = a[i]    if(j = i-1; temp < a[j] && j >=0; j--){      a[j+1] = a[j];    }    a[j] = temp;  }  }

(2)折半插入排序

(3)希尔排序

2.交换排序

(1)冒泡排序

(2)快速排序。快速排序是冒泡排序的一种改进。它的基本思想是,通过一趟排序将排序记录分割成独立的两部分,其中一部分的关键字均比另一部分的关键字小,中间的枢轴点移动到它最后的位置。然后分别对左右两部分的记录继续排序,以达到整个序列有序。

void QuidSort(int a[], int size){  Qsort(a, 0 ,size-1);}void Qsort(int a[], int low, int hight){  int pivotloc  if(low < high){    pivotloc = Partition(a, low, high);    Qsort(a, low, pivotloc - 1);    Qsort(a, pivotloc + 1, high);  }}int Partition(int a[], int low, int high){  int pivotkey = a[low];  while(low < high){    while( low < high && a[high] >= pivotkey) --high;    a[low]= a[high];    while(low < high && a[low] <= pivotkey) ++low;    a[high] = a[low];    }  a[low] = pivotkey;  return low;}

3.选择排序

(1)简单选择排序

(2)堆排序

/*  * File:   main.cpp * Author: brownwn * * Created on 2015年1月14日, 下午3:07 */#include <cstdlib>#include <stdio.h>void HeapAdjust(int a[], int s, int m){    int rc = a[s];    int j;    for(j=2*s;j<=m;j*=2){        if(j<m && a[j] < a[j+1]) ++j;        if(rc >= a[j]) break;        a[s] = a[j];        s = j;    }    a[s] = rc;}//int a[] 1-length,a[0] not use void heapSort(int a[], int length){    int i;    for( i = length/2; i>0; --i){        HeapAdjust(a,i,length);    }                                 //此时a[1]最大    for(i = length; i > 1; --i){      //调整为大顶堆        int temp = a[1];        a[1] = a[i];        a[i] = temp;        HeapAdjust(a,1,i-1);    }    // return a[1]; 可以返回第一个值,最大值。}int main(int argc, char** argv) {    int a[7] = {0,1,5,8,10,6,20};   //注意这个数组,给索引1-7排序,所以长度为6。索引0的元素是没有用的。    heapSort(a, 6);    for (int i = 1; i <= 6; i++){        printf("%d\n", a[i]);    }    return 0;}

  

4.归并排序

5.计数排序

排序算法总结