快速算法演示

原创 2007年09月29日 22:51:00

 快速算法是通过反复对产生的文件进行划分来实现的

时间复杂度:
最坏情况的时间是O(n2)
平均情况的时间是O(nlogn)

空间复杂度:
当n>1  S(n)=2+S(|_(n-1)/2_|)
当n<=1 S(n)=0

(C#)源代码 quicksort.cs

using System;
using System.Text;

namespace cn.blog8s
{
    
/// <summary>
    
/// 快速分类算法演示
    
/// </summary>
    public class BINSRCH
    {
        
static void Main()
        {
            
int[] A = new int[] { 65707580856055504532767 };
            print(A, 
9);
            quickSort(A, 
09);
            Console.Write(
"请输入一个大于1且小于9的数: ");
            
int k = Convert.ToInt32(Console.ReadLine());
            Console.WriteLine(
"" + k + "小元素是:" + A[select(A, 9, k - 1)]);
            Console.Read();
        }

        
private static int partition(int[] a,int m,int p)
        {
//划分集合算法 
            int v = a[m];//划分元素
            int i = m;
            
int sum = p;
            
int temp;
            
while (true)
            {
                
do
                {
                    i
++;
                }
                
while (a[i]<v);//找一个比划分元素大的元素
                do
                {
                    p
--;
                }
                
while (a[p]>v);//找一个比划分元素小的元素
                if (i < p)
                {
                    temp 
= a[i]; a[i] = a[p]; a[p] = temp;//用上面找出来的值来交换
                }
                
else
                {
                    
break;
                }
            }
            a[m] 
= a[p]; a[p] = v;//把划分元素和右半部分最小的值交换
            Console.Write("本次划分元素:"+a[p]+"   ");
            print(a, 
9);
            
return p;//p是快速分类划分元素的下标a[p]是第p小的值,划分元素是位置不用变了
        }


        
private static void quickSort(int[] a,int p,int q)
        {
//快速分类算法
            int j;
            
if (p < q)
            {
                j 
= partition(a, p, q+1);//j是返回的划分元素的位置 参数q+1很关键记得要加1哦
                quickSort(a, p, j - 1);
                quickSort(a, j 
+ 1, q); 
            } 
        }

        
private static int select(int[] a,int n,int k)
        {
//选择算法
            int N = n;
            
int m = 0;
            
int j;
            Console.WriteLine(
"选择问题算法开始执行");
            
do
            {                
                j
=partition(a,m,N);
                
if (j == k)
                {
                    
break;
                }
                
else if (k < j)
                {
                    N 
= j;
                }
                
else
                {
                    m 
= j + 1;
                }
            }
            
while (true);
            
return j;
        }

        
private static void print(int[] a,int sum)
        {
//打印用
            for (int i = 0; i < sum; i++)
            {
                Console.Write(a[i]
+" ");
            }
            Console.WriteLine(
"");
        }

    }

}

 

(c++)源代码 quicksort.cpp (这个代码没有包含选择算法)

#include <stdlib.h>
#include 
<iostream.h>

int a[]={65,70,75,80,85,60,55,50,45,32767};
void print()
{
    
for (int i=0;i<9;i++)
    {
        cout
<<a[i]<<" ";
    }
    cout
<<endl;

}
int partition(int m,int p)
{
    
int i,j,k;
    
int v;
    
int temp;
    v
=a[m];
    i
=m;
    j
=p;
    
while (i<j)
    {
        
do 
        {
            i
++;
        }
        
while (a[i]<v);
        
        
do
        {
            j
--;
        }
        
while (a[j]>v);

        
if (i<j)
        {
          temp
=a[i];
          a[i]
=a[j];
          a[j]
=temp;
        }
    }
    a[m]
=a[j];
    a[j]
=v;
    print();
    
return j;
}

void quicksort(int p,int q)
{
    
int i;
    
int j;
    i
=p;
    j
=q;
    
if (i<j)
    {
        j
=q+1;
    j
=partition(i,j);
    quicksort(i,j
-1);
    quicksort(j
+1,q);
    }
    
}

void main()
{
  quicksort(
0,9);
  print();
}

JavaScript排序算法动画演示效果实现

JavaScript排序算法动画演示效果实现。冒泡排序、插入排序、选择排序、快速排序、归并排序、希尔排序动画演示。 实现过程。...
  • liusaint1992
  • liusaint1992
  • 2016年06月13日 11:29
  • 3428

超级详细解读基本排序算法(不看后悔,带排序演示动画)

排序与我们日常生活中息息相关,比如,我们要从电话簿中找到某个联系人首先会按照姓氏排序、买火车票会按照出发时间或者时长排序、买东西会按照销量或者好评度排序、查找文件会按照修改时间排序等等。在计算机程序设...
  • litong09282039
  • litong09282039
  • 2015年06月02日 16:53
  • 5978

找工作知识储备(3)---从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

[置顶] 找工作知识储备(3)---从头说12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用 分类: 笔试面试基础知识 算法那些事儿2013-09-29 16:54 ...
  • pi9nc
  • pi9nc
  • 2013年10月01日 16:15
  • 13429

12种排序算法:原理、图解、动画视频演示、代码以及笔试面试题目中的应用

0、前言      从这一部分开始直接切入我们计算机互联网笔试面试中的重头戏算法了,初始的想法是找一条主线,比如数据结构或者解题思路方法,将博主见过做过整理过的算法题逐个分析一遍(博主当年自己学...
  • tangdong3415
  • tangdong3415
  • 2017年01月04日 10:33
  • 1804

快速排序和归并排序 使用图形化界面的方式

实现归并排序的另一种方式是从小数组开始归并:首先我们将数组的每一个元素都当做一个只有一个元素的数组,然后将其两两归并。然后我们将整个数组的每两个元素都当做一个小数组,然后将其两两归并,然后四个四个归并...
  • mymy_blog
  • mymy_blog
  • 2017年01月19日 22:16
  • 365

GIF演示排序算法

最近在准备笔试,面试,看了不少关于排序算法的知识,总感觉代码有余,直观不足。 所以想利用直观的GIF动图来演示各种排序算法。1.插入排序(Insertion Sort)1.1算法简介插入排序(Ins...
  • u011464124
  • u011464124
  • 2017年04月11日 15:33
  • 830

蚁群算法的模拟——动画演示

一、蚁群算法介绍          蚁群算法是一种在图中寻找最优路径的机率型算法。因为其算法的依据是局部的最优通过迭代形成全局最优,由于中间过程随机性因素比较多,因此称为机率型算法。算法的设计思想是...
  • wang_dong001
  • wang_dong001
  • 2016年12月27日 11:58
  • 1119

数据结构中的7种排序算法

数据结构中的7种排序算法排序是将一个记录的任意序列重新排列成一个按键值有序的序列。 时间复杂度主要考虑元素的移动次数。 结构如下: 1.直接插入排序 1,定义:依次将待排序序列中的每一个记录...
  • Decorator2015
  • Decorator2015
  • 2016年03月31日 16:12
  • 1351

A*寻路算法讲解+源码DEMO演示

本文源码下载地址:http://download.csdn.net/detail/sun2043430/5907609 源起 最近回头温习云风的书,看到A*寻路算法,这个算法也是我一直想学习实现一下的...
  • sun2043430
  • sun2043430
  • 2013年08月11日 16:21
  • 3370

数据结构与算法 ---- 线性表 及Java实现 顺序表、链表、栈、队列

数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目, 它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养...
  • chenleixing
  • chenleixing
  • 2015年01月04日 14:57
  • 3050
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速算法演示
举报原因:
原因补充:

(最多只允许输入30个字)