码迷,mamicode.com
首页 > 编程语言 > 详细

排序算法总结

时间:2015-01-14 19:38:01      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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.计数排序

排序算法总结

标签:

原文地址:http://www.cnblogs.com/zhutianpeng/p/4222532.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!