排序算法之二:冒泡、插入、希尔、快排、归并
来源:互联网 发布:聊天室程序源码java 编辑:程序博客网 时间:2024/04/27 19:13
还是打击太深,面的太水,不然,也不会把这些老黄历再扒出来….
希望多写写能够增加熟练度~~
#include <iostream>#include <stdlib.h>#include <stdio.h>using namespace std;//交换void swap(int* arr, int x, int y) { int tmp = arr[x]; arr[x] = arr[y]; arr[y] = tmp;}//打印void print(int* arr, int n) { for (int i = 0;i < n;i++) { cout << arr[i] << '\t'; }}//简单的交换排序 非正宗的冒泡排序void BuddleSort(int* arr, int n) { int i, j; for (i = 0;i < n;i++) { for (j = i + 1;j < n;j++) { if (arr[i] > arr[j]) { swap(arr, i, j); } } }}//正宗的冒泡排序void BuddleSort1(int * arr, int n) { int i, j; for (i = 0;i < n;i++) { for (j = n - 2;j >= i;j--) { if (arr[j] > arr[j + 1]) swap(arr, j, j + 1); } }}//冒泡排序改进void BuddleSort2(int * arr, int n) { int i, j; int swap_falg = 1; for (i = 0;i < n && swap_falg;i++) { swap_falg = 0; for (j = n - 2;j >= i;j--) { if (arr[j] > arr[j + 1]) { swap(arr, j, j + 1); swap_falg = 1; } } }}//简单选择排序void SelectSort(int* arr, int n) { int i, j, min; for (i = 0;i < n;i++) { min = i; for (j = i + 1;j < n;j++) { if (arr[min] > arr[j]) min = j; } if (min != i) { swap(arr, i, min); } }}//直接插入排序void InsertSort(int* arr, int n) { int i, j; int tmp; for (i = 1;i < n;i++) { if (arr[i] < arr[i - 1]) { tmp = arr[i]; for (j = i - 1;arr[j] > tmp;j--) { arr[j + 1] = arr[j]; } arr[j + 1] = tmp; } }}//希尔排序void ShellSort(int* arr, int n) { int i, j; int tmp; int increment = n; do { increment = increment / 3 + 1; for (i = increment;i < n;i++) { if (arr[i] < arr[i - increment]) { tmp = arr[i]; for (j = i - increment;j >= 0 && tmp < arr[j];j -= increment) { arr[j + increment] = arr[j]; } arr[j + increment] = tmp; } } } while (increment > 1);}//快速排序int Partition(int* arr, int low, int high) { int pivokey = arr[low]; int i = 0; while (low < high) { while (low < high && arr[high] >= pivokey) { high--; } swap(arr, low, high); while (low < high && arr[low] <= pivokey) { low++; } swap(arr, low, high); } return low;}void QuickSort(int* arr, int low, int high) { int pivot; if (low < high) { pivot = Partition(arr, low, high); QuickSort(arr, low, pivot - 1); QuickSort(arr, pivot + 1, high); }}//归并排序//将两个有序数列a[first ... mid] 和 [mid...last]合并void mergearray(int* a,int first,int mid,int last,int* temp){ int i = first,j = mid +1; int m = mid,n = last; int k = 0; while(i <= m && j <= n){ if(a[i] <= a[j]){ temp[k++] = a[i++]; }else{ temp[k++] = a[j++]; } } while(i <= m){ temp[k++] = a[i++]; } while(j <= n){ temp[k++] = a[j++]; } for(int i=0;i<k;i++){ a[first+i] = temp[i]; }}void mergesort(int* a,int first,int last,int* temp){ if(first < last){ int mid = first + (last - first) / 2; mergesort(a,first,mid,temp); mergesort(a,mid+1,last,temp); mergearray(a,first,mid,last,temp); }}bool MerfeSort(int* a,int n){ int *p = new int[n](); if(p == NULL){ return false; } mergesort(a,0,n-1,p); delete[] p; return true; }void printArray(int* arr,int n){ for(int i = 0;i< n;i ++){ cout << arr[i] << '\t'; }}int main(){ int a[] = {2,3,1,4,5,7,6,9,8,10}; MerfeSort(a,10); printArray(a,10); return 0;}
先到这里~~
0 0
- 排序算法之二:冒泡、插入、希尔、快排、归并
- 排序算法:快排,插入,希尔,归并,堆,选择,冒泡
- 排序算法--冒泡、插入、归并、快排
- 各种排序算法(冒泡、选择、快排、插入、希尔、堆排、归并、计数、基数)
- 八种常见排序算法:插入、冒泡、选择、希尔、归并、快排、堆排序、基数排序
- 常见排序算法总结与实现(冒泡、插入、选择、希尔、堆排序、归并、快排)
- 排序算法 快排 堆排 选择 插入 希尔 归并
- 采用回调函数的内部排序算法-插入排序,希尔排序,冒泡,快排,堆排,归并排,基数排序
- 采用回调函数的内部排序算法-插入排序,希尔排序,冒泡,快排,堆排,归并排,基数排序
- Java实现的排序算法及比较 [冒泡,选择,插入,归并,希尔,快排]
- 常见排序算法C++实现(冒泡,直接插入,希尔,堆,归并,简单选择,快排)
- 排序及选择算法的java实现(一)选择、冒泡、插入、希尔、归并、快排
- 常用排序算法简介与java实现(冒泡、插入、选择、希尔、归并、快排)
- 经典排序算法总结--冒泡、快排、插入、希尔、归并、选择
- 经典排序算法总结--冒泡、快排、插入、希尔、归并、选择
- 经典排序算法总结--冒泡、快排、插入、希尔、归并、选择
- 八种排序算法(直接插入,希尔,直接选择,堆,冒泡,快排,归并,基数)
- 常用排序算法的js实现(冒泡、选择、插入、归并、希尔、快排)
- Unity3D-深入剖析NGUI的游戏UI架构
- git 远程仓库回滚
- PHP中读写文件实现代码
- C#—密度较量拓展
- 推理逻辑算法--------------问题抽象与数学建模
- 排序算法之二:冒泡、插入、希尔、快排、归并
- Opengl备忘--创建一个简单GLFW窗口
- 小需求:查询mapping对应的表及字段
- Android API Guides---App Manifest Attribute
- Program2_1012
- 面向对象在javascript中的三大特征之封装
- HDU 1213 How Many Tables
- String的实现
- hdoj--1794--方格填数(规律)