快速排序-c++(分别用数组和容器实现)

/**********************************************************************
*版权所有 (C)2014, cheng yang。
*
*文件名称:快速排序.cpp 数组实现
*内容摘要:无
*其它说明:无
*当前版本: V1.0
*作    者:cheng yang
*完成日期: 20140625
*
*  版本       修改时间     修改人           修改内容
********************************************************************
*   V1.0        20140625    cy			   创建
**********************************************************************/
#include<iostream>
#include <vector>
using namespace std;
inline void swap(int &a, int &b)//是取地址,是要修改数组的!!!!!
{
	int iTemp = a;
	a = b;
	b = iTemp;
}
/**********************************************************************
*功能描述:数组的划分
*输入参数:数组,数组首下标,数组尾下标
*输出参数:无
*返回值:主元下标
*其它说明:无
*修改日期        版本号            修改人         修改内容
* --------------------------------------------------------------
*
***********************************************************************/

int Partition(int ArrayInput[],int iFirst, int iLast)
{
	int iKey = ArrayInput[iLast];
	int j = iFirst-1 ;
	for (int i = iFirst; i != iLast; i++)
	{
		if (ArrayInput[i] <= iKey)
		{
			j++;
			if (j != i)
			{
				swap(ArrayInput[j], ArrayInput[i]);

			}
		}
	}
	swap(ArrayInput[iLast], ArrayInput[j + 1]);
	return j + 1;
}
/**********************************************************************
*功能描述:quick sort
*输入参数:数组,数组首下标,数组尾下标
*输出参数:无
*返回值:无
*其它说明:无
*修改日期        版本号            修改人         修改内容
* --------------------------------------------------------------
*
***********************************************************************/
void QuickSort(int ArrayInput[],int iFirst, int iLast)
{

	if (iFirst < iLast)
	{
		int iIndex = Partition(ArrayInput,iFirst, iLast);
		QuickSort(ArrayInput, iFirst, iIndex - 1);
		QuickSort(ArrayInput,iIndex + 1, iLast);
	}
}

/****************************************************************
*功能描述:  主函数                                             *
*输入参数:  无                                                 *
*输出参数:  无                                                 *
*返回值  :无                                                 *
*其他说明:  无                                                 *
*修改日期        版本号       修改人        修改内容
* ------------------------------------------------------------------
*
****************************************************************/

int main()
{
	int ArrayInput[10] = { 2, 4, 1, 5, 11, 6, 9, 16, 23, 10 };
	int iFirst = 0;
	int iLast = 9;
	QuickSort(ArrayInput,iFirst, iLast);

	int i = 0;
	while (i < 10)
	{
		cout << ArrayInput[i++] << endl;
	}
	system("pause");
}

容器实现

#include <iostream>
#include <vector>
using namespace std;

inline void swap(int &a, int &b)
{
	int temp = a;
	a = b;
	b = temp;
}

template<class T>
int Partition(vector<T>& a, int istart, int iend)
{
	int ipivot = a[iend];
	int i = istart - 1;
	for (int j = istart; j != iend; j++)
	{
		if (a[j] <= ipivot)
		{
			i++;
			if (i != j)
			{
				swap(a[i], a[j]);
			}
		}
	}
	swap(a[iend], a[i + 1]);
	return i + 1;
}

template<class T>
void QuickSort(vector<T>& a, int istart, int iend)
{
	if (istart< iend)
	{
		int ipivot_pos = Partition(a, istart, iend);
		QuickSort(a, istart, ipivot_pos - 1);
		QuickSort(a, ipivot_pos + 1, iend);
	}

}
int main()
{
	vector<int> a;
	int input{ 0 };
	while (cin >> input)
		a.push_back(input);
	int istart = 0;
	int iend = a.size()-1;//输入6个数,大小是6,数组下标别忘了减1啊

	QuickSort(a, istart, iend);
	for (auto i = a.begin(); i != a.end(); i++)
	{
		cout << *i << endl;
	}
	system("pause");
	return 0;
}

快速排序-c++(分别用数组和容器实现)

时间: 2024-10-26 03:46:15

快速排序-c++(分别用数组和容器实现)的相关文章

STL之vector,数组线性容器array,list容器,算法find,find_if,bind1st,仿函数

 1.STL(Standard Template Library,是用泛型技术来设计完成的实例)的概念与组成 Iterator(迭代器) Container(容器) Algorithm(算法) Adaptors(配接器) STL的六大组件分别是: 容器(Container) 算法(Algorithm) 迭代器(Iterator) 仿函数(Function object) 适配器(Adapter) 空间配置器(allocator):只能分配内存等 2.容器与算法 案例如下: #include<

vector动态二维数组(容器的容器)占用内存分析

之前在这里写过一篇"C++中的动态二维数组".在C++中没有动态二维(多维)数组.但是根据原理我们可以自己创建. 在看过STL的vector源代码后"<STL源码剖析>---stl_vector.h阅读笔记"后,想到可以用容器的容器来做二维数组. 创建一个2x4的二维数组.想到的办法是:先创建一个容器的容器,外层大小的2(2行),然后里面容器小大为4(4列). int row=2,col=4; vector<vector<int> &g

从头认识java-14.1 再次对照数组与容器

这一章节我们再次深入的对照数组与容器. 数组与容器主要集中在三个方面:效率.类型.基础类型. 我们能够从三方面做出对照. 1.效率 这里的下来是指add和get 的速度 以下以add为例: package com.ray.ch13; import java.util.ArrayList; public class Test { public static void main(String[] args) { Integer zero = new Integer(0); ArrayList<Int

Java编程思想学习(十二) 数组和容器

一.数组 1).数组的多种初始化方式 下面总结了初始化数组的多种方式,以及如何对指向数组的引用赋值,使其指向另一个数组对象.值得注意的是:对象数组和普通数组的各种操作基本上都是一样的:要说有什么不同的话就是对象数组默认值为null,而基本数组视本身情况而定. 1 package lkl; 2 3 import java.util.Arrays; 4 5 ///下面演示了数组的初始化 6 //包括对象数组和普通数组 7 class Base{ 8 private static long count

C++中的快速排序(使用vector和数组的不同)

1.快速排序是最最基本的排序算法之一,时间复杂度是O(nlog2(n)) 基本思想:分治法+递归 假设key为该序列的第一个元素,从后往前遍历,找到第一个小于key值的元素,将该元素赋值给左边的起始值,再从前往后遍历,找到第一个大于key值的元素,将其赋值给刚才右边第一个小于key值的值,当low<high,则不断递归,知道有序为止. 在用数组int num[]和C++的vector传递地址时,vector需要传引用,否则,没法得到正确地址,因为vector本质上是一个类对象,因此传值会得不到正

Java当中数组和容器之间的相互转换

一.容器转化到数组使用toArray()方法 二.数组转化为容器,使用Arrays.asList(数组)会返回一个ArrayList,然后使用容器的方法可以对其进行操作. [1] http://my.oschina.net/laigous/blog/28470

5、数组和容器--Collection

一.数组:同一个类型数据的集合,其实他也是一个容器 1.数组的好处:可以自动给数组中的元素从0开始编号,方便操作这些数据 2.数组的定义: 在Java中常见: 格式1:  类型 [] 数组名 = new 类型[数组长度或数组元素的个数];    例如:  int [] dada = new int[3]; 格式2:  类型 [] 数组名 = new 类型[]{值1,值2,值3……};          例如:  int [] data = new int{1,2,3,……}; 和上边的意思一模一

数组和容器(集合)相关的杂记

1. 数组是一种线性数据结构,用连续的存储空间存储相同类型数据(1) 线性表:数组.链表.队列.栈 非线性表:树 图(2) 连续的内存空间.相同的数据,所以数组可以随机访问,但对数组进行删除插入,为了保证数组的连续性,就要做大量的数据搬移工作 2. 容器和数组的对比: 相比于数字,java中的ArrayList封装了数组的很多操作,并支持动态扩容.一旦超过存储容量,扩容时比较耗内存,因为涉及到内存申请和数据搬移. 3.数组适用的场景:  (1) Java ArrayList 的使用涉及装箱拆箱,

Java学习笔记-数组与容器间的转制-asList

先列举一下我们需要的api: java.util.Collection接口中: toArrayObject[] toArray() 返回包含此 collection 中所有元素的数组.如果 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素. 返回的数组将是"安全的",因为此 collection 并不维护对返回数组的任何引用.(换句话说,即使 collection 受到数组的支持,此方法也必须分配一个新的数组).因此,调用者可以随意修