博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
几种常见的排序算法实现(C++)
阅读量:4048 次
发布时间:2019-05-25

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

记录了冒泡排序,选择排序,直接插入排序,希尔排序,快速排序,堆排序和归并排序的实现。

#include
#include
using namespace std;void bubbleSort(vector
&s) {
for (int i = s.size(); i > 0; i--) {
for (int j = 1; j < i; j++) if (s[j - 1] > s[j]) swap(s[j - 1], s[j]); }}void bubbleSortUp(vector
&s) {
bool sign = false; for (int i = s.size(); !sign&&i > 0; i--) {
sign = true; for (int j = 1; j < i; j++) if (s[j - 1] > s[j]) {
swap(s[j - 1], s[j]); sign = false; } }}void insertSort(vector
&s) {
for (int i = 1; i < s.size(); i++) {
int temp = s[i],j; for (j = i - 1; j >= 0 && s[j] > temp; j--) s[j + 1] = s[j]; s[j + 1] = temp; }}void selectSort(vector
&s) { for (int i = 0; i < s.size(); i++) { int min = i; for (int j = i + 1; j < s.size(); j++) min = s[min] > s[j] ? j : min; swap(s[i], s[min]); }}void shellSort(vector
& s) { int increament = s.size(); while (increament > 1) { increament = increament / 3 + 1; for (int i = increament; i < s.size(); i++) { int temp = s[i], j; for (j = i - increament; j >= 0 && s[j] > temp; j = j - increament) s[j + increament] = s[j]; s[j + increament] = temp; } }}int quick(vector
&s, int left, int right) { int temp = s[left]; while (left < right) { while (left
= temp) right--; swap(s[left], s[right]); while (left < right&&s[left] < temp) left++; swap(s[left], s[right]); } return left;}void quickSort(vector
&s, int left, int right) { if (left >= right) return; int temp = quick(s, left, right); quickSort(s, left, temp - 1); quickSort(s, temp + 1, right); return;}void heap(vector
& s, int index, int len) { int left = 2 * index + 1; int right = 2 * index + 2; int max = index; if(left <= len) max = s[max] < s[left] ? left : max; if(right <= len) max = s[max] < s[right] ? right : max; if (max != index) { swap(s[max], s[index]); heap(s, max, len); } return;}void creatHeap(vector
& s) { int num = s.size() >> 1 - 1; for (int i = num; i >= 0; i--) heap(s, i, s.size() - 1);}void heapSort(vector
& s) { creatHeap(s); for (int i = s.size()-1; i >= 0; i--) { swap(s[0], s[i]); heap(s, 0, i-1); }}void merage(vector
&s, int left, int mid, int right) { int i = left, j = mid + 1; vector
data; while (i <= mid && j <= right) { if (s[i] < s[j]) { data.push_back(s[i]); i++; } else { data.push_back(s[j]); j++; } } while (i <= mid) { data.push_back(s[i]); i++; } while (j <= right) { data.push_back(s[j]); j++; } for (int i = left; i <= right; i++) s[i] = data[i - left]; return;}void merageSort(vector
&s, int left, int right) { if (left == right) return; int mid = (left + right) >> 1; merageSort(s, left, mid); merageSort(s, mid + 1, right); merage(s, left, mid, right);}void Show(const vector
& s) { for (int temp : s) cout << temp << " "; cout << endl;}int main() { vector
test = { 1,4,2,5,3,5,8,7,5,0 }; Show(test); merageSort(test,0,test.size()-1); Show(test); return 0;}

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

你可能感兴趣的文章
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
查看>>
python:如何将excel文件转化成CSV格式
查看>>
机器学习实战之决策树(一)
查看>>
机器学习实战之决策树二
查看>>
[LeetCode By Python]7 Reverse Integer
查看>>
[leetCode By Python] 14. Longest Common Prefix
查看>>
[LeetCode By Python]121. Best Time to Buy and Sell Stock
查看>>
[LeetCode By Python]122. Best Time to Buy and Sell Stock II
查看>>
[LeetCode By Python]125. Valid Palindrome
查看>>
[LeetCode By Python]136. Single Number
查看>>
Android/Linux 内存监视
查看>>
Android2.1消息应用(Messaging)源码学习笔记
查看>>
android raw读取超过1M文件的方法
查看>>
MPMoviePlayerViewController和MPMoviePlayerController的使用
查看>>
CocoaPods实践之制作篇
查看>>
[Mac]Mac 操作系统 常见技巧
查看>>
苹果Swift编程语言入门教程【中文版】
查看>>
捕鱼忍者(ninja fishing)之游戏指南+游戏攻略+游戏体验
查看>>
iphone开发基础之objective-c学习
查看>>
iphone开发之SDK研究(待续)
查看>>