【算法】插入排序、冒泡排序、选择排序、归并排序 C语言实现
2019-04-11 11:26
459 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/hello_ape/article/details/89206211
简单算法就直接上代码了
- 插入排序
[code] void printval(int *a, int n) { for (int i = 0; i < n; ++i) std::cout << a[i] << std::endl; } void insertsort(int *a, int n) { for (int i = 1; i <= n - 1; i++){ int j = i - 1; //val 表示待排序数据 int val = a[i]; for (; j >= 0; j--){ //如果待插入数据比当前值小 if (val < a[j]){ //将当前数据向后移动一位 a[j + 1] = a[j]; } //否则说明待插入数据大于当前数值 else break; } a[j+1] = val; printval(a, n); std::cout << "_________after one sort" << std::endl; } }
- 冒泡排序
[code]void myswap(int a[], int i, int j) { int tmp = a[i]; a[i] = a[j]; a[j] = tmp; } void bubblesort(int a[], int n) { if (a == NULL || n < 2) return; for (int end = n - 1; n > 0; n--){ for (int i = 0; i < end; i++){ if (a[i] > a[i + 1]){ myswap(a, i,i+1); } } } }
- 选择排序
[code]void selectsort(int a[], int n) { if (a == NULL || n < 2) return; for (int i = 0; i < n; i++){ int min = i; for (int j = i + 1; j < n; j++) min = a[min] < a[j] ? min : j; myswap(a, i, min); } }
- 归并排序
[code]void mergesort(int a[], int n) { if (a == NULL || n < 2) return; mergesort(a, 0, n - 1); } void mergesort(int a[], int l,int r) { if (a == NULL || (r-l+1) < 2) return; int mid = l + ((r-l)>>1); mergesort(a, l, mid); mergesort(a, mid+1, r); merge(a, l,mid,r); } void merge(int a[], int l,int m, int r) { //计算数组长度 int len = r - l + 1; //分配辅助空间大小 int *temparry = (int *)malloc(sizeof(int)*len); int i = l; int j = m+1; //辅助空间数组的下标 int index = 0; while (i <= m && j <= r){ temparry[index++] = a[i] < a[j] ? a[i++] : a[j++]; } //拷贝剩余部分 while (i <= m){ temparry[index++] = a[i++]; } while (j<=r) temparry[index++] = a[j++]; //将辅助数组内容拷贝至原数组 for (int i = 0; i < len; i++) a[l + i] = temparry[i]; delete temparry; }
相关文章推荐
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 算法导论之插入排序,选择排序,归并排序,冒泡排序,希尔排序,堆排序,快速排序的c语言实现
- 几种常见排序算法之Java实现(插入排序、希尔排序、冒泡排序、快速排序、选择排序、归并排序)
- 各种排序算法实现——基数排序、归并排序、插入排序、冒泡排序、选择排序、快速排序、堆排序、希尔排序
- 内部排序冒泡排序、插入排序、选择排序、快速排序的算法和PHP实现
- c语言中冒泡排序、插入排序、选择排序算法比较
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序——C++实现
- 选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- 几种常用的排序算法的分析及java实现(希尔排序,堆排序,归并排序,快速排序,选择排序,插入排序,冒泡排序)
- C++实现冒泡排序,选择排序,插入排序,快速排序,归并排序
- Python实现冒泡排序、选择排序、插入排序、快速排序、归并排序、二分法查找算法(基于《算法导论》伪代码)
- 冒泡排序、选择排序、插入排序 算法实现(C++)
- c语言实现选择排序、冒泡排序、插入排序
- 笔试面试最常涉及到的12种排序算法(包括插入排序、二分插入排序、希尔排序、选择排序、冒泡排序、鸡尾酒排序、快速排序、堆排序、归并排序、桶排序、计数排序和基数排序)进行了详解。每一种算法都有基本介绍、算
- 用Java语言实现的各种排序,包括插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序、SortUtil等...
- 数据结构与算法——三种基础排序算法C#实现(冒泡排序、选择排序、插入排序)
- 算法系列(二)冒泡排序、选择排序、插入排序和希尔排序(Java实现)
- c语言中冒泡排序、插入排序、选择排序算法比较