QuickSort 模板

 1 #include<stdio.h>
 2 int num[100];
 3
 4 void quicksort(int left,int right)
 5 {
 6     int i,j,t,temp;
 7     if(left>right) return;
 8
 9     temp=num[left]; // temp用来存放基准值
10     i=left;
11     j=right;
12     while(i!=j)
13     {
14         while(num[j]>=temp&&i<j)
15             j--;  // 哨兵j从右往左找一个比基准数小的数
16         while(num[i]<=temp&&i<j)
17             i++;  //  哨兵i从左往右找一个比基准数大的数
18
19         // 交换他们
20         if(i<j)
21         {
22             t=num[i];
23             num[i]=num[j];
24             num[j]=t;
25         }
26     }
27     // 将基准数与i,j哨兵碰头的数交换
28     num[left]=num[i];
29     num[i]=temp;
30     // 将基准数左边和右边的数列再进行排序
31     quicksort(left,i-1);
32     quicksort(i+1,right);
33     return ;
34 }
35 int main(void)
36 {
37      int i,j,n;
38      scanf("%d",&n);
39      for(i=1;i<=n;i++)
40          scanf("%d",&num[i]);
41
42      quicksort(1,n);
43
44      for(i=1;i<=n;i++)
45          printf("%d ",num[i]);
46
47      return 0;
48 }
时间: 2024-08-09 18:33:04

QuickSort 模板的相关文章

模板化的七种排序算法,适用于T* vector&lt;T&gt;以及list&lt;T&gt;

最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板纯属于偷懒,更方便于测试代码的有效性,等代码写完也懒得去改了.下面开始介绍这段代码,有什么不对的地方欢迎前来指正. 一共写了七种排序,插入排序InsertSort.堆排序HeapSort.快速排序QuickSort.合并排序MergeSort,计数排序CountingSort,基数排序RadixSo

Vector模板类

1 #include "stdafx.h" 2 typedef int Rank; //秩 3 #define DEFAULT_CAPACITY 3 //默认的初始容量(实际应用中可设置为更大) 4 5 template <typename T> class Vector 6 { //向量模板类 7 protected: 8 Rank _size; int _capacity; T* _elem; //规模.容量.数据区 9 void copyFrom(T const* A

快排模板

#include<iostream> #include<cstdio> #include<cmath> using namespace std; void quicksort(int a[],int left,int right) { int i,j,base; i=left; j=right; base=a[(i+j)/2]; while (i<=j){ while (a[i]<base) i++; while (a[j]>base) j--; if

[C++]排序模板(含C++模板代码)

排序模板 一.插入排序 特点:stable sort.In-place sort 最优复杂度:当输入数组就是排好序的时候,复杂度为O(n),而快速排序在这种情况下会产生O(n^2)的复杂度. 最差复杂度:当输入数组为倒序时,复杂度为O(n^2) 插入排序比较适合用于"少量元素的数组". 伪代码: C++模板: template <typename T> void Insertion_Sort(T *array, size_t length) { if (length <

摘:数据结构各种算法实现(C++模板)

目  录 1.顺序表. 1 Seqlist.h 1 Test.cpp 6 2.单链表. 8 ListNode.h 8 SingleList.h 10 test.cpp 20 3.双向链表. 22 NodeList.h 22 DoubleList.h 24 Test.cpp 34 4.循环链表. 36 ListNode.h 36 CircularList.h 37 Test.cpp 47 5.顺序栈. 49 SeqStack.h 49 Test.cpp 54 6.链式栈. 55 StackNode

2016/6/1 第九届ACM大赛前夕模板总结

 一.最小生成树...............................................................................................................2 1.最小生成树:v + v + value布线问题.................................................................2 3.prim算法之矩阵类型......................

C++泛型编程之函数模板

泛型语义 泛型(Generic Programming),即是指具有在多种数据类型上皆可操作的含意.泛型编程的代表作品 STL 是一种高效.泛型.可交互操作的软件组件. 泛型编程最初诞生于 C++中,目的是为了实现 C++的 STL(标准模板库).其语言支持机制就是模板(Templates). 模板的精神其实很简单:类型参数化(type parameterized),即,类型也是一种参数,也是一种静多态. 换句话说, 把一个原本特定于某个类型的算法或类当中的类型信息抽掉,抽出来做成模板参数. 函

实验二:函数重载、模板、简单类的定义和实现

[实验结论] #函数重载 编写重载函数add(),实现对int型,double型,Complex型数据的加法.在main()函数中定义不同类型 数据,调用测试. #include<iostream> using namespace std; struct Complex { double real; double imaginary; }; //函数声明 int add(int a, int b); double add(double a,double b); Complex add(Comp

实验2:函数重载、函数模板、简单类的定义和实现

实验目的 1. 掌握c++中函数的声明.定义.调用和参数传递方式 2. 掌握c++中带有默认形参值的函数声明和定义方法 3. 理解函数重载,掌握c++中函数重载的实现方式 4. 理解函数模板,掌握c++中函数模板的简单使用 5. 理解面向对象的抽象和封装,掌握c++中类的定义.实现和使用方法 实验准备 1. 函数的声明.定义.调用.参数传递方法 2. 带有默认形参值的函数 3. 函数重载 4. 函数模板(9.1.1节 + 9.3节) 其中,9.3节,理解3个常用的排序算法和两个常用的查找算法 5