博客
关于我
排序算法
阅读量:555 次
发布时间:2019-03-09

本文共 3935 字,大约阅读时间需要 13 分钟。

#include 
using namespace std;// 直接插入排序void InsertSort(int arr[]) {}void InsertSort(int arr[], int n) { int i, j, key; for (i = 1; i < n; i++) { key = arr[i]; for (j = i - 1; j >= 0; j--) { if (key < arr[j]) { arr[j+1] = arr[j]; } else { break; } } arr[j+1] = key; }}// 希尔排序:分组后的插入排序void ShellSort(int arr[], int n) { for (int dk = n/2; dk > 0; dk = dk/2) { int i, j, key; for (i = dk; i < n; i++) { key = arr[i]; for (j = i - dk; j >= 0; j--) { if (key < arr[j]) { arr[j+dk] = arr[j]; } else { break; } } arr[j+dk] = key; } }}// 冒泡排序void BubbleSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { bool flag = false; for (int j = n-1; j > i; j--) { if (arr[j-1] > arr[j]) { swap(arr[j-1], arr[j]); flag = true; } } if (!flag) { return; } }}// 堆排序// 首先排序成大顶堆void heapify(int arr[], int n, int i) { int lagest = i; int lson = 2 * i + 1; int rson = 2 * i + 2; if (lson < n && arr[lagest] < arr[lson]) { lagest = lson; } if (lson < n && arr[lagest] < arr[rson]) { lagest = rson; } while (lagest != i) { swap(arr[lagest], arr[i]); heapify(arr, n, lagest); }}// 排序入口void heap_sort(int arr[], int n) { for (int i = n / 2 - 1; i >= 0; i++) { heapify(arr, n, i); } for (int i = n-1; i > 0; i--) { swap(arr[i], arr[0]); heapify(arr, i, 0); }}// 归并排序int low = 0, high = sizeof(arr)/sizeof(int);void MergeSort(int arr[], int low, int high) { if (low < high) { int mid = low + (high - low)/2; MergeSort(arr, low, mid); MergeSort(arr, mid+1, high); Merge(arr, low, mid, mid+1, high); }}void Merge(int arr[], int start1, int end1, int start2, int end2) { int n1 = end1 - start1 + 1; int n2 = end2 - start2 + 1; int arr_left[n1], arr_right[n2]; for (int i = 0; i < n1; i++) { arr_left[i] = arr[start1 + i]; } for (int i = 0; i < n2; i++) { arr_right[i] = arr[start2 + i]; } int left = 0, right = 0; int p = start1; while (left < n1 && right < n2) { if (arr_left[left] < arr_right[right]) { arr[p] = arr_left[left]; left++; p++; } else { arr[p] = arr_right[right]; right++; p++; } } while (left < n1) { arr[p] = arr_left[left]; left++; p++; } while (right < n2) { arr[p] = arr_right[right]; right++; p++; }// 直接选择排序void SelectSort(int arr[], int n) { for (int i = 0; i < n-1; i++) { int min = i; for (int j = i + 1; j < n; j++) { if (arr[j] < arr[min]) { min = j; } } if (min != i) { swap(arr[i], arr[min]); } }// 快速排序/*选定pivot中心轴大于pivot放在他的右边小于pivot放在他的左边*/int Partition(int arr[], int low, int high) { int pivot = arr[low]; while (low < high) { while (low < high && arr[high] >= pivot) { high--; } arr[low] = arr[high]; while (low < high && arr[low] <= pivot) { low++; } arr[high] = arr[low]; } arr[low] = pivot; return low;}void QuickSort(int arr[], int low, int high) { if (low < high) { int pivotpos = Partition(arr, low, high); QuickSort(arr, low, pivotpos-1); QuickSort(arr, pivotpos+1, high); }}int main() { int arr[6] = {2, 1, 5, 4, 3, 8}; int n = sizeof(arr) / sizeof(arr[0]); // InsertSort(arr, n); // ShellSort(arr, n); // heap_sort(arr, n); QuickSort(arr, 0, n-1); for(int i = 0; i < n; i++) { cout << arr[i] << endl; } return 0;}

转载地址:http://aukpz.baihongyu.com/

你可能感兴趣的文章
Python中的threading
查看>>
python中的urlencode和urldecode
查看>>
python中的with学习
查看>>
python中的write和read的用法,有无换行符
查看>>
Python中的“真“和“假“
查看>>
PYTHON中的主体对象标识
查看>>
Python中的修饰函数始终返回NONE
查看>>
Python中的元素相乘与矩阵相乘(附Demo)
查看>>
Python中的分组/聚类数字
查看>>
python中的十六进制字符串到字节数组
查看>>
Python中的单元测试框架:使用unittest进行有效测试
查看>>
Python中的压缩和解压缩模块:zipfile和tarfile
查看>>
python中的变量可以随时命名、随时赋值_python基础2
查看>>
PYTHON中的可变和不可变字符串
查看>>
Python中的多个元组到两对元组?
查看>>
Python中的多态性
查看>>
PYTHON中的套接字与多处理.Connection.Listener
查看>>
Python中的子句提取/长句切分
查看>>
python中的字符串比较但不是Levenshtein距离(我认为)
查看>>
python中的字符范围
查看>>