数据结构与算法——排序算法总结
2019-03-11 20:17
309 查看
排序算法:
1、冒泡:对数据的有序性 敏感,一旦排序完成就会 立刻停止,如果待排序的数据是基本有序的,他的排序效率是非常高的。 也是实现最简单的排序,代码不易出错,安全性高。
2、插入:在已经有序的数据中,添加新的数据,对这个组数据再进行排序比较适合插入排序。
3、选择:是冒泡排序的变种,不是正统的排序方法,但代码简单,容易构思
4、快速:在所有排序中平均速度最快的一种
5、归并:把待排序的数据拆分成不可再拆分的数据对,再1:1 合并在一起,形成2:2,再把2:2合并在一起,形成4:4,直到数组排序完成。
6、堆:把待排序的数据看成一个完全二叉树。
代码如下:
#include <stdio.h> #include <stdlib.h> void show_arr(int arr[],size_t len); { for(int i=0; i<10;i++) { printf("%d ",arr[i]); } } // 冒泡排序 void bubble_sort(int arr[],size_t len) { for(int i=1; i<len; i++) { bool flag = true; for(int j=0; j<len-i; j++) { printf("*"); if(arr[j] > arr[j+1]) { flag = false; swap(arr[j],arr[j+1]); } } if(flag) return; } } // 插入排序 void insert_sort(int arr[],int end,int count) { for(int i=end+1,j; i<end+count; i++) { int val = arr[i]; for(j=i; j>=0; j--) { if(arr[j-1] > val) arr[j] = arr[j-1]; else break; } arr[j] = val; } } // 选择排序 void select_sort(int arr[],size_t len) { for(int i=0; i<len-1; i++) { int min = i; for(int j=i+1; j<len; j++) { 1e84d if(arr[min] > arr[j]) min = j; } if(min != i) swap(arr[min],arr[i]); } } //快速排序法 void _quick_sort(int arr[],size_t left,size_t right) { // 计算标杆的位置 int p = (left+right)/2; // 备份标杆的值 int val = arr[p]; // 备份起点和终点 size_t l=left,r=right-1; // 循环保证起点和终点不相遇 while(l<r) { // 在左边找出比标杆大的值 for(;l<p && arr[l]<=val; l++); // 如果循环不是以l<p结束的说明找到大于标杆的值 if(l<p) { // 把大于标杆的值移动到标杆位置 arr[p] = arr[l]; // 这个数的位置就成了新的标杆位置 p = l; } // 大右边找到比标杆小的值 for(;p<r && arr[r]>val; r--); // 如果循环不是以p<r结束的说明撕开小于标杆的值 if(p<r) { // 把小于标杆的值值移动到标杆位置 arr[p] = arr[r]; // 这个数的位置就成了新的标杆位置 p = r; } } // 还原标杆值 arr[p] = val; // 排序标杆左边数据 if(p-left > 1) _quick_sort(arr,left,p); // 排序标杆右边的数据 if(right-p > 2) _quick_sort(arr,p+1,right); } void quick_sort(int arr[],size_t len) { _quick_sort(arr,0,len); } int main() { int arr[10] = {}; for(int i =0 ;i<10; i++) { arr[i] = rand()%100; } show_arr(arr,len); bubble(); }
相关文章推荐
- 【数据结构与算法】【排序算法】排序算法总结
- 【数据结构与算法】【排序算法】排序算法总结
- 【数据结构与算法】内部排序总结(附各种排序算法源码)
- 数据结构与算法——排序算法总结(1)
- ZH奶酪:【数据结构与算法】基础排序算法总结与Python实现
- 【数据结构与算法】【排序算法】排序算法总结
- 【数据结构与算法】【排序算法】排序算法总结
- 【数据结构与算法】【排序算法】排序算法总结
- 【数据结构与算法】-常见排序算法总结
- 【数据结构与算法】【排序算法】排序算法总结
- 【数据结构与算法】内部排序总结(附各种排序算法源码)
- 【数据结构与算法】【排序算法】排序算法总结
- 【数据结构与算法】内部排序总结(附各种排序算法源码)
- 【数据结构与算法】【排序算法】排序算法总结
- 数据结构中排序算法的总结
- [数据结构与算法]常用排序算法的动画效果图
- javascript数据结构与算法--基本排序算法(冒泡、选择、排序)及效率比较
- 挖掘算法中的数据结构(五):排序算法总结 和 索引堆及优化(堆结构)
- 郝斌数据结构 26 通过链表排序算法的演示 再次详细讨论到底什么是算法和泛型
- 浅析数据结构与算法2--基本排序算法