C++ ------------排序算法(冒泡排序-快速排序-选择排序-插入排序-希尔排序)
2016-06-29 17:29
721 查看
// // main.cpp // TestC++ // // Created by luojuan on 16/3/28. // Copyright © 2016年 luojuan. All rights reserved. // #include <iostream> #include <algorithm> #include <vector> #include <map> using namespace std; int myArray[20]; //MARK:==============================冒泡排序============================== void sort_bubble(int left,int right) { if (left > right) { return; } int count=0; do { count=0; for (int j=left; j < right; j++) { if (myArray[j] > myArray[j+1]) { count++; int change=myArray[j]; myArray[j]=myArray[j+1]; myArray[j+1]=change; } } } while ( count > 0); } //MARK:==============================快速排序============================== void sort_quick(int left,int right) { if (left > right) { return; } int i,j,temp; i=left; j=right; temp=myArray[left]; while (i != j) { while (j > i && myArray[j] >= temp) { j--; } while (i < j && myArray[i] <= temp) { i++; } if (i < j) { int change=myArray[i]; myArray[i]=myArray[j]; myArray[j]=change; } } int change=myArray[i]; myArray[i]=myArray[left]; myArray[left]=change; sort_quick(left,i-1); sort_quick(i+1,right); } //MARK:==============================选择排序============================== void sort_selection(int left,int right) { if (left > right) { return; } int temp=left; while (temp < right) { int minNum=temp; for (int i=temp; i <= right; i++) { if (myArray[i] < myArray[minNum]) { minNum=i; } } if (minNum != temp) { //替换 int change=myArray[minNum]; myArray[minNum]=myArray[temp]; myArray[temp]=change; } temp++; } } //MARK:==============================插入排序============================== void sort_insert(int left,int right) { //默认0是已经排序好的 int temp=left+1; while (temp <= right) { int num=myArray[temp]; int insert=temp-1; while (myArray[insert] > num && insert >= left) { myArray[insert+1]=myArray[insert]; insert--; } myArray[insert+1]=num; temp++; } } //MARK:==============================希尔排序============================== void shell_sort(int length) { //第一个增量 int gap=length/2; while (gap >= 1) { for (int temp=gap; temp < length; temp++) { int i=temp-gap; int num=myArray[temp]; while (i >= 0 && myArray[i] > num) { myArray[i+gap]=myArray[i]; i-=gap; } myArray[i+gap]=num; } gap=gap/2; } } int main(int argc, const char * argv[]) { for (int i=0; i < 20; i++) { if (i%2 ==0) { myArray[i]=i*10; } else { myArray[i]=-i*10; } } shell_sort(20); for (int i=0; i < 20; i++) { cout <<myArray[i] << endl; } return 0; }
相关文章推荐
- 插入排序
- 冒泡排序
- 快速排序
- C#冒泡法排序算法实例分析
- C#快速排序算法实例分析
- C#递归算法之快速排序
- C++实现对输入数字组进行排序
- C++快速排序的分析与优化详解
- C++实现简单的希尔排序Shell Sort实例
- php实现插入排序
- 用PHP写的一个冒泡排序法的函数简单实例
- php快速排序原理与实现方法分析
- js实现数组冒泡排序、快速排序原理
- 分享javascript实现的冒泡排序代码并优化
- php简单实现快速排序的方法
- Java 快速排序(QuickSort)原理及实现代码
- 快速排序和分治排序介绍
- java 算法之快速排序实现代码
- Java数据结构及算法实例:冒泡排序 Bubble Sort
- python冒泡排序与常用数学计算