C++ 冒泡排序、选择排序、快速排序
#include<stdio.h>
#define N 10 void swap(int *p1, int *p2);
void BubbleSort(int *a);
void SelectSort(int a[]);
void QuickSort(int *a, int left, int right);
int main(){
int a[N] = {3,7,9,8,5,6,1,6,0,2};
int i;
//SelectSort(a);
QuickSort(a,0,sizeof(a)/sizeof(a[0])-1);
for(i=0; i<N; i++){
printf("%d ", a[i]);
}
return 0;
} void swap(int *p1, int *p2){
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
void swap2(int a[], int i, int j)
{
int t = a[i];
a[i] = a[j];
a[j] = t;
}
void BubbleSort(int *a){ //大的向上升 int i,j;
for(i=0; i<N-1; i++){ /* 注意 N-1 */
for(j=0; j<N-1-i; j++){
if(a[j]>a[j+1])
swap(&a[j],&a[j+1]);
}
} } void SelectSort(int a[]){ //最小的留在最下面
int i,j,min; for(i=0; i<N-1; i++){ /*一个N-1,下面n*/
min = i;
for(j=i+1; j<N; j++){
if(a[j]<a[min])
min =j;
}
swap(&a[i],&a[min]);
}
} void QuickSort(int *a, int left, int right){
int key = a[left];
int i = left;
int j = right; if(left >= right)
return ; while(i<j){
while(i<j && a[j]>=key){ /*a[j]>=key 如果只写> 会进入死循环*/
j--;
}
a[i] = a[j];
while(i<j && a[i]<=key){
i++;
}
a[j] = a[i];
} a[i] = key; /*此时 i=j*/
QuickSort(a, left, i-1);
QuickSort(a, i+1, right);
} /*
最差时间分析 平均时间复杂度 稳定度 空间复杂度
冒泡 O(n2) O(n2) 稳定 O(1)
选择 O(n2) O(n2) 稳定 O(1)
快速 O(n2) O(n*log2n) 不稳定 O(log2n)~O(n)
*/
C++ 冒泡排序、选择排序、快速排序的更多相关文章
- 归并排序 & 计数排序 & 基数排序 & 冒泡排序 & 选择排序 ----> 内部排序性能比较
2.3 归并排序 接口定义: int merge(void* data, int esize, int lpos, int dpos, int rpos, int (*compare)(const v ...
- C语言实现 冒泡排序 选择排序 希尔排序
// 冒泡排序 // 选择排序 // 希尔排序 // 快速排序 // 递归排序 // 堆排序 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h& ...
- 学习C#之旅 冒泡排序,选择排序,插入排序,希尔排序[资料收集]
关于冒泡排序,选择排序,插入排序,希尔排序[资料收集] 以下资料来源与网络 冒泡排序:从后到前(或者从前到后)相邻的两个两两进行比较,不满足要求就位置进行交换,一轮下来选择出一个最小(或最大)的放到 ...
- C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序
C# 插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 以下列出了数据结构与算法的八种基本排序:插入排序 冒泡排序 选择排序 高速排序 堆排序 归并排序 基数排序 希尔排序 ...
- python算法(一)基本知识&冒泡排序&选择排序&插入排序
本节内容: 算法基本知识 冒泡排序 选择排序 插入排序 1. 算法基本知识 1.1 什么是算法? 算法(algorithm):就是定义良好的计算过程,他取一个或一组的值为输入,并产生出一个或一组值作为 ...
- php基础排序算法 冒泡排序 选择排序 插入排序 归并排序 快速排序
<?php$arr=array(12,25,56,1,75,13,58,99,22);//冒泡排序function sortnum($arr){ $num=count($arr); ...
- 数组排序-冒泡排序-选择排序-插入排序-希尔排序-快速排序-Java实现
这五种排序算法难度依次增加. 冒泡排序: 第一次将数组相邻两个元素依次比较,然后将大的元素往后移,像冒泡一样,最终最大的元素被移到数组的最末尾. 第二次将数组的前n-1个元素取出,然后相邻两个元素依次 ...
- 冒泡排序 & 选择排序 & 插入排序 & 希尔排序 JavaScript 实现
之前用 JavaScript 写过 快速排序 和 归并排序,本文聊聊四个基础排序算法.(本文默认排序结果都是从小到大) 冒泡排序 冒泡排序每次循环结束会将最大的元素 "冒泡" 到最 ...
- 算法 排序lowB三人组 冒泡排序 选择排序 插入排序
参考博客:基于python的七种经典排序算法 [经典排序算法][集锦] 经典排序算法及python实现 首先明确,算法的实质 是 列表排序.具体就是操作的列表,将无序列表变成有序列表! 一 ...
- PHP冒泡排序,选择排序,插入排序
1 冒泡排序是两个元素相互比较,找到最小值,然后冒泡到最后,代码如下:
随机推荐
- (转)MFC界面风格
以前在XP写的程序,现在系统换成了WIN7,现在对话框在编辑和预览的时候显示都如图一所示,可实际编译生成之后的显示却如图二所示,是什么问题?如何设置两者的显示风格使其保持一致? ----------- ...
- nxlog 日志采集
Nxlog 主要用于各业务后端服务的日志采集,windows环境和linux环境都支持. RPM 包:rpm -ivh http://nxlog.co/system/files/products/fi ...
- nginx 配置文件[转]
#运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1; #全局错误日志及PID文件 #error_log logs/error.log; ...
- OpenWrt启动过程分析+添加自启动脚本【转】
一.OpenWrt启动过程分析 转自: http://www.eehello.com/?post=107 总结一下OpenWrt的启动流程:1.CFE->2.linux->3./etc/p ...
- ajax使用异步问题
使用$.ajax(...)中 async:默认为true,表示异步,具体描述,请查看别的文档 var formData = new FormData($("#dataForm")[ ...
- CentOs 6.6里kdump启动失败的原因
在VMware中新安装了CentOs 6.6,重启系统发现kdump服务启动失败 先来说一下,什么是kdump kdump 是一种先进的基于 kexec 的内核崩溃转储机制.当系统崩溃时,kdump ...
- GBDT学习
白话GBDT: https://blog.csdn.net/qq_26598445/article/details/80853873 优点: 预测精度高 适合低维数据 能处理非线性数据,该版本GBDT ...
- 【ES】学习4-结构化搜索
1. 结构化搜索得到的结果只有是和否,没有相似概念. term可以实现精确值查询 curl -XGET 'localhost:9200/logstash-cowrie/_search?pretty' ...
- BOM下的属性和方法---上
-------------BOM------------------------------------------------ 三个系统对话框 浏览器可以通过alert().confirm()和 ...
- 委托Func和Action【转】
平时我们如果要用到委托一般都是先声明一个委托类型,比如: private delegate string Say(); string说明适用于这个委托的方法的返回类型是string类型,委托名Say后 ...