插入排序,快速排序,堆排序,归并排序
2013-11-19 16:19
288 查看
插入排序
快速排序
堆排序
归并排序
使用c标准库提供的rand()函数随机产生20万个[0,100]的整数,大致的排序时间为:插入排序43.47秒;快速排序0.67秒;堆排序0.05秒;归并排序0.05秒.另外直接调用C++algorithm的sort排序,耗时大致为0.04秒,标准库就是牛啊!
void insert_sort(int arry[], int length) { if(length < 2) return; for(int i = 1; i != length; ++i) if(arry[i-1] > arry[i]){ int temp = arry[i], j; for(j = i-1; j >= 0 && arry[j] > temp; --j) arry[j+1] = arry[j]; arry[j+1] = temp; } }
快速排序
int quick_adj(int arry[], int low, int high) { //将第一个,最后一个和中间一个元素中居中的元素选为枢轴 if((arry[low] >= arry[(high+low)/2] && arry[low] <= arry[high]) || (arry[low] >= arry[high] && arry[low] <= arry[(high+low)/2])){ int temp = arry[low]; arry[low] = arry[high]; arry[high] = temp; }else if((arry[(high+low)/2] >= arry[low] && arry[(high+low)/2] <= arry[high]) || (arry[(high+low)/2] >= arry[high] && arry[(high+low)/2] <= arry[low])){ int temp = arry[(high+low)/2]; arry[(high+low)/2] = arry[high]; arry[high] = temp; } int pivot = arry[high]; while(low < high){ while(arry[low] <= pivot && low < high) ++low; arry[high] = arry[low]; while(arry[high] >= pivot && low < high) --high; arry[low] = arry[high]; } arry[low] = pivot; return low; } void quick_sort(int arry[], int low, int high) { if(low < high){ int pivot = quick_adj(arry, low, high); quick_sort(arry, low, pivot-1); quick_sort(arry, pivot+1, high); } }
堆排序
void heap_adj(int arry[], int low, int high) { //大顶堆 int temp = arry[low]; for(int i = 2*low+1; i <= high; i = 2*i+1){ if(i < high && arry[i] < arry[i+1]) ++i; if(arry[i] <= temp) break; arry[low] = arry[i]; low = i; } arry[low] = temp; } void heap_sort(int arry[], int length) { for(int i = (length-1)/2; i >= 0; --i) heap_adj(arry, i, length-1); for(int i = length-1; i > 0; --i){ int temp = arry[0]; arry[0] = arry[i]; arry[i] = temp; heap_adj(arry, 0, i-1); } }
归并排序
void merge(int arry[], int* temp, int low, int mid, int high) { int i, j, k; for(i = low, j = mid+1, k = low; i <= mid && j <= high; ++k){ if(arry[i] < arry[j]) temp[k] = arry[i++]; else temp[k] = arry[j++]; } while(i <= mid) temp[k++] = arry[i++]; while(j <= high) temp[k++] = arry[j++]; while(--k >= low) arry[k] = temp[k]; } void m_sort(int arry[], int* temp, int low, int high) { if(low < high){ int mid = (low+high)/2; m_sort(arry, temp, low, mid); m_sort(arry, temp, mid+1, high); merge(arry, temp, low, mid, high); } } void merge_sort(int arry[], int low, int high) { int* p = new int[high-low+1]; m_sort(arry, p, low, high); delete[] p; }
使用c标准库提供的rand()函数随机产生20万个[0,100]的整数,大致的排序时间为:插入排序43.47秒;快速排序0.67秒;堆排序0.05秒;归并排序0.05秒.另外直接调用C++algorithm的sort排序,耗时大致为0.04秒,标准库就是牛啊!
相关文章推荐
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- java实现七种排序 (插入排序, 希尔排序, 插入排序, 快速排序, 简单选择排序, 堆排序, 归并排序)
- 【程序员笔试面试必会——排序①】Python实现 冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、希尔排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 数据结构-排序算法详解(插入排序,希尔排序,堆排序,归并排序,快速排序,桶式排序)
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 面试珠玑 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 面试珠玑 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 经典排序算法 -----冒泡排序,插入排序,快速排序,归并排序,堆排序
- 插入排序,希尔排序,堆排序,归并排序,快速排序Java实现
- 常见比较排序算法的实现(归并排序、快速排序、堆排序、选择排序、插入排序、希尔排序)
- 插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- 冒泡排序,插入排序,快速排序,归并排序,堆排序,选择排序,希尔排序
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- 排序方法了解一下(冒泡排序、选择排序、堆排序、插入排序、希尔排序、归并排序、快速排序、基数排序)
- 经典排序算法设计与分析(插入排序、冒泡排序、选择排序、shell排序、快速排序、堆排序、分配排序、基数排序、桶排序、归并排序)
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)