C语言快速排序算法代码分析

最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。由于平时编程时用C/C++,现在是Java,也练练Java语法。

今天先介绍一下命令模式。

概念:

命令模式(Command):将一个请求封装成一个对象,从而使你可用不同的请求对象对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。

组成:

(1)、抽象命令类(Commamd):提供一个执行操作的接口;

(2)、具体命令类(ConcreteConmmad):完成或继承抽象命令类,提供具体命令的实现:将一个接受者类绑定为一个动作,调用接受者对应的操作。

(3)、接受者类(Receiver):完成具体操作;

(4)、请求者类(Invoker):提供请求者对应的操作。

优点:

容易把命令加入集合,封装具体实现。

示例代码:

package Pattern;

import java.util.ArrayList;

interface Receiver {
	public void Action();
}

class Receiver1 implements Receiver {
	public void Action() {
		System.out.println("执行动作1!");
	}
}

class Receiver2 implements Receiver {
	public void Action() {
		System.out.println("执行动作2!");
	}
}

abstract class Command {
	protected Receiver myReceiver;

	public Command(Receiver tempReceiver) {
		myReceiver = tempReceiver;
	}

	abstract public void Excute();
}

class ConcreteCommand extends Command {
	public ConcreteCommand(Receiver tempReceiver) {
		super(tempReceiver);
	}

	public void Excute() {
		myReceiver.Action();
	}
}

class Invoker {
	private ArrayList<Command> myCommand=new ArrayList<Command>();//一定要实例化
	public void Add(Command tempCommand) {
		myCommand.add(tempCommand);
	}
	public void Excute() {
		for (int i = 0; i < myCommand.size(); i++)
			myCommand.get(i).Excute();
	}
}

public class CommandPattern {
	public static void main(String[] a) {

		ConcreteCommand myConcreteCommand1 = new ConcreteCommand(
				new Receiver1());
		ConcreteCommand myConcreteCommand2 = new ConcreteCommand(
				new Receiver2());
		Invoker myInvoker = new Invoker();
		myInvoker.Add(myConcreteCommand1);
		myInvoker.Add(myConcreteCommand2);
		myInvoker.Add(myConcreteCommand1);
		myInvoker.Excute();
	}
}

C语言快速排序算法代码分析,布布扣,bubuko.com

时间: 2024-12-17 13:43:41

C语言快速排序算法代码分析的相关文章

编程算法 - 快速排序算法 代码(C)

快速排序算法 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 经典的快速排序算法, 作为一个编程者, 任何时候都要完整的手写. 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #include <stdlib.h> int RandomInRange(int min,

C语言 - 快速排序算法

1. 快速排序算法 1 #include<stdio.h> 2 3 struct node 4 { 5 int key; 6 }; 7 typedef struct node DataType; 8 9 int Qukpass_sort(DataType Ar[],int s,int t); 10 int Quk_Sort(DataType Ar[],int s,int t); 11 12 int main(void) 13 { 14 15 int n,i; 16 DataType array

快速排序算法sort分析

快速排序的思想是分治法的思想. 一般是按照这个序列的首元素为 mid 基准,把比比mid大的元素放在后面.比 mid 小的元素放前面.然后依次递归,把在 mid 前面的所有元素当成一个新的序列进行刚才的操作,在mid后面的元素看成一个新的序列也进行这样的操作,直到这样得到的序列为一个元素.则排序完成. 当然为基准的元素不一定非要是1:首元素,也可以选2:末尾元素,或者3中间位置元素,4取首.末.中的中间值,4.取一个随机数.当然这个基准选取的好的话算法的效率会不同,最好是每次取一个所有元素排序之

c语言快速排序算法(转)

原文链接http://blog.csdn.net/morewindows/article/details/6684558 快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影. 总的说来,要直接默写出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解

C 语言快速排序算法以及 qsort

1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 //快速排序 5 void quick_sort(float data[], int left, int right){ 6 int i = left; 7 int j = right; 8 float tag = data[i]; 9 while(i<j){ 10 while( i<j && tag < d

排序算法--快速排序算法解析

一.快速排序算法思路 ①.取待排序列表的第一个元素p,通过归位算法,挪移他到列表中正确的位置. ②.列表被元素p分成两部分,左边都比元素p小,右边都比元素p大. ③.通过递归,在两部分,重复1.2步骤,直至列表有序. 归位算法动画演示: 二.快速排序算法代码示例 1 def partition(l,left,right):#归位算法 2 temp = l[left] #保存归位元素 3 while left <right: 4 while l[right]>=temp and left<

【C/C++学院】0907-象棋五子棋代码分析/寻找算法以及排序算法

象棋五子棋代码分析 编译代码报错: 错误 1 error MSB8031: Building an MFC project for a non-Unicode character set is deprecated. You must change the project property to Unicode or download an additional library. See http://go.microsoft.com/fwlink/p/?LinkId=286820 for mo

快速排序算法-C语言实现

注:本篇内容为翻译,之所以选择这篇进行翻译原因是该文章含有动画,能够更加直观地展示快速排序.同时,可以仔细看一下代码,代码中把结构化的思想给予了更加充分地表现.按照功能进行模块划分的思想得到了彻底地贯彻. 以下内容翻译自: http://cprogramminglanguage.net/quicksort-algorithm-c-source-code.aspx 译文: 在快速排序算法中,使用了分治策略.首先把序列分成两个子序列,递归地对子序列进行排序,直到整个序列排序结束. 步骤如下: 在序列

基于c语言实现的快速排序算法

题目描述:对输入的n个数进行排序并输出. 解题思路:其实是很常规的排序题,但是为了一复习,所以采用快排的方法.这里就当是快速排序的代码实现练习好了. 快速排序是非常经典的一个算法,可以在对数规模的时间下实现对一组数的排序. 其基于分治的思想,每一趟排序把原组数划分为更小的范围进行排序,并且一定有一个数会在每趟排序下放在最终的位置. 用通俗的语言描述这个过程,就是从这一个分组的两头开始向中间遍历,一边遍历一边把大的放到右边,小的放到左边. 最后当low=high时停留在pivot的位置,再将一开始