快速算法演示

原创 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();
}

相关文章推荐

算法快速演示

  • 2007年09月01日 10:24
  • 2.02MB
  • 下载

演示快速排序算法(12KB)

  • 2006年02月23日 09:05
  • 11KB
  • 下载

Java加密解密快速入门上篇【包括MD5、BASE64、DES、RSA等算法】

搞Java的攻城狮应该比较欣喜若狂的,不仅Sun公司的JDK提供了庞大的类库,而且还有众多的开源组织和个人不断地丰富着Java的生态系统。没错的,诸如MD5、BASE64、DES、RSA等经典加密解密...

Toeplitz矩阵相乘快速算法

  • 2017年10月11日 21:26
  • 521KB
  • 下载

算法之排序-----排序第一篇 快速排序

快速排序 算法介绍   排序是所有算法里比较基本的算法了,并且非常简单。那么我为什么还要自己再写一遍呢?我觉得知识是大家的,只有你掌握了,这个知识才属于你,才能为你所用。所以接下来,我要连续...

快速角点检测算法

  • 2017年09月19日 15:42
  • 1KB
  • 下载

快速排序算法

  • 2015年05月01日 16:41
  • 1KB
  • 下载

【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插...
  • C_jian
  • C_jian
  • 2016年01月16日 13:54
  • 545
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:快速算法演示
举报原因:
原因补充:

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