插入排序,快速排序,堆排序,归并排序
来源:互联网 发布:windows10 sql server 编辑:程序博客网 时间:2024/05/16 02:17
插入排序
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秒,标准库就是牛啊!
- 插入排序、希尔排序、堆排序、归并排序、快速排序
- 排序:插入,希尔,堆,快速,归并排序
- 插入排序,快速排序,堆排序,归并排序
- 插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 冒泡排序 快速排序 选择排序 堆排序 直接插入排序 希尔排序 归并排序
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- 插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序
- 冒泡排序,插入排序,快速排序,归并排序,堆排序,选择排序,希尔排序
- 插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序
- 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 插入排序、冒泡排序、选择排序、快速排序、堆排序、归并排序算法比较
- 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 冒泡排序,选择排序,插入排序,堆排序,归并排序,快速排序
- 快速排序、希尔排序、插入排序、选择排序、归并排序、堆排序总结
- 排序总结(代码实现):选择排序,插入排序,归并排序,快速排序,堆排序
- 冒泡排序,快速排序,归并排序,选择排序,插入排序,堆排序
- 排序算法(堆排序,归并排序,快速排序、选择排序、直接插入排序)
- Web App开发入门
- oracle 执行计划讲解
- Oracle CASE语句
- WAS性能测试工具的使用
- 小规模纳税人与一般纳税人的分别是什么
- 插入排序,快速排序,堆排序,归并排序
- UVA-10037 Bridge 模拟+dfs
- JS JSON对象转为字符串的简单实现方法
- VC控件DateTimePicker使用方法
- 用"window.showModalDialog()"实现DIV模式弹出窗口
- Android——Video/视频 相关知识总结贴
- js全页面刷新方法+jquery之超简单的div显示和隐藏特效demo
- JavaWeb -- 会话, Cookie 和 Session
- zend studio 使用心得