算法复习--排序
来源:互联网 发布:好老板进销存软件 编辑:程序博客网 时间:2024/05/29 04:50
排序中主要有插入排序、冒泡排序、归并排序、快速排序等
主要从空间消耗、时间复杂度、最差时间复杂度等方面考虑算法的好处;
1.插入排序
插入排序是一种简单直观的排序算法。它的工作原理非常类似于我们抓扑克牌
对于未排序数据(右手抓到的牌),在已排序序列(左手已经排好序的手牌)中从后向前扫描,找到相应位置并插入。
插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
int A[] = { 6, 5, 3, 1, 8, 7, 2, 4 };// 从小到大插入排序 int n = sizeof(A) / sizeof(int); int i, j, get; for (i = 1; i < n; i++) // 类似抓扑克牌排序 { get = A[i]; // 右手抓到一张扑克牌 j = i - 1; // 拿在左手上的牌总是排序好的 while (j >= 0 && A[j] > get) // 将抓到的牌与手牌从右向左进行比较 { A[j + 1] = A[j]; // 如果该手牌比抓到的牌大,就将其右移 j--; } A[j + 1] = get;// 直到该手牌比抓到的牌小(或二者相等),将抓到的牌插入到该手牌右边(相等元素的相对次序未变,所以插入排序是稳定的) }
2.冒泡排序
int a[10]={13,2,5,18,7,12,9,10,15,6}; for(int i=0;i<10;i++) for(int j=9;j>=i;j--) { num++; if (a[j]<a[j-1]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } }3.归并排序
#include "stdafx.h"#include <iostream>#include<conio.h>using namespace std;//将数组 a[low,mid] 与 a(mid,high] 合并(归并)void Merge(int * a, int low, int mid, int high, int * temp){int i, j, k;i = low;j = mid + 1;//避免重复比较a[mid]k = 0;while (i <= mid && j <= high)//数组a[low,mid]与数组(mid,high]均没有全部归入数组temp中去{if (a[i] <=a[j]) //如果a[i]小于等于a[j]temp[k++] = a[i++]; //则将a[i]的值赋给temp[k],之后i,k各加一,表示后移一位elsetemp[k++] = a[j++]; //否则,将a[j]的值赋给temp[k],j,k各加一}while (i <=mid) //表示数组a(mid,high]已经全部归入temp数组中去了,而数组a[low,mid]还有剩余temp[k++] = a[i++]; //将数组a[low,mid]剩下的值,逐一归入数组tempwhile (j <=high) //表示数组a[low,mid]已经全部归入到temp数组中去了,而数组(mid,high]还有剩余temp[k++] = a[j++]; //将数组a(mid,high]剩下的值,逐一归入数组tempfor (i = 0; i < k; i++) //将归并后的数组的值逐一赋给数组a[low,high]a[low + i] = temp[i]; //注意,应从a[low+i]开始赋值}//二路归并(递归实现)void MergeSort(int * a, int low, int high, int * temp){if (low < high){int mid = (low + high) / 2;MergeSort(a, low, mid, temp); //左边有序MergeSort(a, mid + 1, high, temp); //右边有序Merge(a, low, mid, high, temp); //再将两个有序序列合并}}/*----------测试代码----------*/int main(){int a[] = { 2,2356,54,43,45};int La = sizeof(a) / sizeof(a[0]);int * p = new int[La];MergeSort(a, 0, La - 1, p);for (int i = 0; i < La; i++){cout << a[i] << ' ';}cout << endl;_getch();//delete[]p;}
阅读全文
0 0
- 快速排序算法复习
- 排序算法复习
- 算法复习--插入排序
- 排序算法复习笔记
- 算法复习--快速排序
- 算法复习--冒泡排序
- 基本排序算法复习
- 复习排序算法
- 算法复习--shell排序
- 算法复习--冒泡排序
- 算法复习--快速排序
- 算法复习--选择排序
- 复习----快速排序算法
- 算法复习--------------箱子排序
- 排序算法复习
- 基础排序算法复习
- 排序算法复习
- 算法复习--排序
- NB IoT中 CDP服务与CoAP关系解释
- AVRCP对volume以及播放状态的控制
- PowerDesigner v16.5.5.0.4693 [64位]
- 关于应用使用jdbc链接数据库的错误
- 9.Python之文件
- 算法复习--排序
- solr集群搭建
- spring常用的注解
- 散列、散列函数、冲突处理
- git reset--hard后恢复暂存区文件
- 代理模式
- PHP Notice: Undefined variable: HTTP_POST_FILES Undefined variable: HTTP_POST_VARS
- 算法竞赛入门经典训练指南 例题1-15 网络 Network UVALive 3902
- spring boot整合redis实现shiro的分布式session共享