C++之排序算法(2)---《那些奇怪的算法》
来源:互联网 发布:js tip提示框 编辑:程序博客网 时间:2024/06/06 09:07
针对排序算法,我们先分别实现了冒泡排序和插入排序,其中插入排序实现了4个版本,但其核心都只有一种啦,就是在插入当前元素的时候确保前面已经插入的元素已经排好序了;而冒泡排序呢,则是经过n-1或者n次比较,每次选出最大或最小的元素放到数组的尾部从右往左一次排放,其实用栈也可以实现哈,下面看看对应的代码及其运行结果,更加深入的理解它啦!!!
#include <iostream>#include <string>using namespace std;void insertSort_while05(int arr[],int n){ for(int i=0;i<n;i++){ int value=arr[i],j=i-1; while(j>=0&&value>arr[j]){ arr[j+1]=arr[j]; j--; } arr[j+1]=value; }}void insertSort_while04(int arr[],int n){ for(int i=0;i<n;i++){ int value=arr[i],j=i; while(j>0&&value>arr[j-1]){ arr[j]=arr[j-1]; j--; } arr[j]=value; }}void insertSort_while03(int arr[], int n){ for (int i = 0; i < n; i++){ int j = i - 1, value = arr[i]; while (j >= 0){ if (value>arr[j]){ arr[j + 1] = arr[j]; j--; } else{ break; } } arr[j + 1] = value; }}void insertSort_while02(int arr[], int n){ for (int i = 1; i < n; i++){ int j = i, value = arr[i]; while (j>0 && value >arr[j-1]){ arr[j] = arr[j - 1]; j--; } arr[j] = value; }}void insertSort_while(int arr[], int n){ for (int i = 1; i < n; i++){ int j = i - 1, value = arr[i]; while (j >= 0){ if (value > arr[j]){ arr[j + 1] = arr[j]; j--; } else{ break; } } arr[j + 1] = value; }}void insertSort_for(int arr[], int n){ for (int i = 1; i < n; i++){ int value = arr[i], j = 0; for (j = i-1; j >= 0; j--){ if (value>arr[j]){ arr[j+1] = arr[j]; } else{ break; } } arr[j + 1] = value; }}void bubbleSort(int arr[],int n){ for(int i=1;i<len;i++){ for(int j=0;j<len-i;j++){ int temp=0; if(arr[j]<arr[j+1]){ temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } }}void bubbleSort(int arr[], int n){ for (int i = 0; i < n-1; i++){ int j = 0; for (j = 0; j < n - 1 - i; j++){ int temp = 0; if (arr[j]<arr[j + 1]){ temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } cout << arr[j] << endl; }}int main(){ int arr[] = { 10, 100, 30, 50, 40, 20, 1, 300 }; insertSort_while03(arr, 8); //bubbleSort(arr, 8); for (int i = 0; i < 8; i++){ cout << arr[i] << " "; } return 0;}
运行结果:
阅读全文
0 0
- C++之排序算法(2)---《那些奇怪的算法》
- C++之快速排序(3)---《那些奇怪的算法》
- C++之堆排序(6)---《那些奇怪的算法》
- C++之归并排序(7)---《那些奇怪的算法》
- C++之实现大顶堆(1)---《那些奇怪的算法》
- 奇怪的排序算法
- C++之二叉排序树(二叉搜索树)的实现(4)---《那些奇怪的算法》
- C++之堆的实现(5)---《那些奇怪的算法》
- C++之最长回文字符串的判断(8)---《那些奇怪的算法》
- C++之字符串的zipzag排列(9)---《那些奇怪的算法》
- C++之最长递增子序列的实现(20)---《那些奇怪的算法》
- C++之平衡二叉树的判定(25)---《那些奇怪的算法》
- C++之数字容器装水问题(10)---《那些奇怪的算法》
- C++之整数转化为罗马数字(11)---《那些奇怪的算法》
- C++之罗马数字转换为整型数字(12)---《那些奇怪的算法》
- C++之最长前缀字符串(13)---《那些奇怪的算法》
- C++之最长公共子序列(21)---《那些奇怪的算法》
- C++之根据组合遍历顺序生成二叉树(25)---《那些奇怪的算法》
- Bootstrap(Js插件篇)
- Mac安装mysqldb(python-mysql)
- LeetCode----- 167.Two Sum II
- Java实现BF串匹配算法
- JavaWeb:报错信息The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- C++之排序算法(2)---《那些奇怪的算法》
- 网络工程师备考笔记<一>
- java4
- 计算机网络---OSI/RM 七层模型
- redis_port
- com.sun.jdi.InvocationException occurred invoking method
- vs2008 专业版使用到期后升级方法
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 D. Hack Portals(区间DP)
- 网络与信息安全研究方向