【学习记录】关于自定义函数快速排序的那些事。。。

。。。前几天老妈又批我了,啊哈算法还没看完。。。

于是不甘落后的我开始努力看书。。。虽然我看了很多了。。。

从头开始!!!

1.自定义函数快速排序

如果一提起排序,你还想得是一下2行东西,那你就out了

#include<algorithm>
sort(a,a+n);

这个效率虽然很高,但人外有人,天外有天,肯定有比这个更快的,那就是---快速排序

看着这个过程很像二分。。。

我们先给一列数:6 1 2 7 9 3 4 5 10 8

进行排序。

我们先将6作为基准数,将比6小的数“扔”到它的左边,比6大的数“扔”到它的右边。

就成这样了。。。

3 1 2 5 4 6 9 7 10 8

然后递归,每次将第1个数作为基准数,一次排序。

下面是代码实现(有注释哦)

#include<iostream>
using namespace std;
int a[100000];
void Qsort(int left ,int right)
{
    if(left>right)return ;
    int temp=a[left];//注意啦!这个很重要!temp中存的就是基准数
    int i=left,j=right;
    while(i!=j)
    {
        //注意,这里顺序很重要,要从右边往左边找
        while(a[j]>=temp && i<j) j--;
        //这是比基准数大的元素都归位了,开始找比基准数小的元素
        while(a[i]<=temp && i<j) i++;
        if(i<j) swap(a[i],a[j]);//如果i,j没有遇上,交换
    }
    //注意:不要忘掉把基准数归位
    a[left]=a[i];
    a[i]=temp;
    Qsort(left,i-1);//处理左边的元素,递归
    Qsort(i+1,right);//处理右边的元素,递归
    return ;
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=0;i<n;i++)scanf("%d",&a[i]);
    Qsort(0,n-1);
    for(int i=0;i<n;i++)printf("%d ",a[i]);
    return 0;
}

还会有后面的讲解哦,欢迎关注

时间: 2024-11-02 04:21:29

【学习记录】关于自定义函数快速排序的那些事。。。的相关文章

JavaScript学习记录day7-高阶函数

JavaScript学习记录day7-高阶函数 [TOC] 1. 什么是高阶函数 高阶函数英文叫Higher-order function.那么什么是高阶函数? JavaScript的函数其实都指向某个变量.既然变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数. 一个最简单的高阶函数: function add(x, y, f) { return f(x) + f(y); } 当我们调用add(-5, 6, Math.abs)时,参数x,

shell学习总结之自定义函数

shell学习总结之自定义函数 Myfun (){ echo patams1 is $1 echo -n "now i is $i " ! [ "$i" ] && exit ; echo jj return '1' } myf=$(Myfun); echo myf Myfun 12 unset Myfun Myfun echo 'the end !'$myf 别人的 #! bin/bash # ----------------------------

swift学习笔记之—自定义函数的规则说明

原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_517.html 1,无返回值的函数 func test(name:String){ } 2,返回一个返回值 func test(name:String) -> Bool{ return true } 3,返回由多个值组成的复合返回值 func test(name:String) -> (Int,Bool){ var position = 1 var v

linux shell学习笔记二---自定义函数(定义、返回值、变量作用域)介绍

linux shell 可以用户定义函数,然后在shell脚本中可以随便调用.下面说说它的定义方法,以及调用需要注意那些事项. 一.定义shell函数(define function) 语法: [ function ] funname [()] { action; [return int;] } 说明: 1.可以带function fun() 定义,也可以直接fun() 定义,不带任何参数. 2.参数返回,可以显示加:return 返回,如果不加,将以最后一条命令运行结果,作为返回值. retu

SQL中存储过程和自定义函数的区别(转载)

存储过程:     存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能.存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数.返回单个或多个结果集以及返回值. 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 1.可以在单个存储过程中执

自定义函数的存储过程的区别

存储过程: 存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能.存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数.返回单个或多个结果集以及返回值. 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 1.可以在单个存储过程中执行一系列

SQL中存储过程和自定义函数的区别

存储过程:     存储过程可以使得对数据库的管理.以及显示关于数据库及其用户信息的工作容易得多.存储过程是 SQL 语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理.存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量.有条件执行以及其它强大的编程功能.存储过程可包含程序流.逻辑以及对数据库的查询.它们可以接受参数.输出参数.返回单个或多个结果集以及返回值. 可以出于任何使用 SQL 语句的目的来使用存储过程,它具有以下优点: 1.可以在单个存储过程中执

SQL Server -- 自定义函数(学习总结,备忘)

SQL Server自定义函数,以前只在书上看过,没有动手去敲一敲,今天刚好接触到,看了几篇博文学习了下.做好备忘很重要!! (@[email protected])Y Learn from:http://www.cnblogs.com/lideng/archive/2013/04/15/3022418.html 自定义函数分为:标量值函数或表值函数两种. 标量值函数:如果 RETURNS 子句指定一种标量数据类型,则函数为标量值函数. 表值函数:如果 RETURNS 子句指定 TABLE,则函

java学习中,匿名函数、构造方法、构造代码块、构造方法中调用构造方法(java 学习中的小记录)

java学习中,匿名函数.构造方法.构造代码块.构造方法中调用构造方法(java 学习中的小记录) 作者:王可利(Star·星星) 匿名函数 匿名对象:没有名字的对象 匿名对象使用的注意点: 1.一般不会用匿名对象给属性赋值,无法获取属性值,每次new 都是一个新的对象. 2.匿名对象永远都不可能是一个对象. 如:person new().name = "星星":是不行的 匿名对象的好处:书写简单. 匿名对象使用的场景: 1.如果一个对象调用一个方法一次的时候,就可以用匿名对象来调用.