计算机算法之快速排序、原址排序、递归的最好应用

原创 2013年12月05日 22:04:14

快速排序是实际应用中常常会用到的一种排序算法:因为它的平均性能非常好:速度也非常快,能够进行原址排序、甚至在虚存环境下也能很好地工作。下面给出一个快速排序在C语言下的实例:

#include "stdio.h"
#include "conio.h"
#define N  24
/*
快速排序算法:时间复杂度是nlg(n),以2为底,不是10!
是实际排序应用中最好的选择,因为它的平均性能非常好
它能够进行原址排序,甚至在虚存环境下也能很好地工作!
注意待排序数组的0号元素并不能用于排序,有特殊作用!
*/
void quickly_sort(int A[],int p,int r)
{
   int q=0;
   if(p<r){
        q=partition(A,p,r);
        quickly_sort(A,p,q-1);
        quickly_sort(A,q+1,r);
   }
}
/*快速排序算法关键的函数如下:它主要实现确定一个数:
这个数的左边的数永远不大于它,而在它右边的数永远不
小于它。 下面的p和r分别表示数组A的下标,p和r构成了
一个区间,在这个区间选择出一个符合要求的数*/
int partition(int A[],int p,int r)
{
    int mid=A[r];  /*假设这个数就是中间数*/
    int i=p-1;
    int j=0,temp=1;
    for(j=p;j<r;j++)
    {
       if(A[j]<mid)
       {
          i=i+1;
          temp=A[j];
          A[j]=A[i];
          A[i]=temp;
       }
    }i++;
    temp=A[r];
    A[r]=A[i];
    A[i]=temp;
    return i;
}
main()
{
    int a[N]={0,2,5,4,3,0,2,8,1,6,7,54,67,4,34,32,12,14,38,21,24,25,78,20},i; /*0号元素没有参加排序,但必须有*/
    quickly_sort(a,1,N-1);
    printf("利用快速算法排序好的数组如下\n");
    for(i=1;i<N;i++) /*0号元素是自行添加,不需要输出*/
        printf(" %d ",a[i]);
    getch();
}


冒泡排序(原址排序)

函数:#ifndef BUBBLESORT #define BUBBLESORTusing namespace std;void Bubble_Sort(int* A, int left, int r...

自己动手写CPU之第七阶段(9)——除法指令说明及实现思路

OpenMIPS设计采用试商法实现除法运算,对于32位的除法,需要至少32个时钟周期才能得到除法结果。本节介绍试商法的一般过程。...

Chapter 1 构造过程抽象

Lisp(List Processing),本书使用的是其方言之一的Scheme。     Lisp重要优点:计算过程的Lisp描述(称为过程)本身又可以作为Lisp的数据来表示和操作。 1.1 ...

快速排序的递归简洁实现

  • 2011年12月08日 16:45
  • 604B
  • 下载

递归分治算法之随机快速排序(Java版本)

/** * 递归分治算法学习之随机快速排序 * 采用随机选择枢纽元素的快速排序算法 * @author Sking */ package 递归分治; import java.util.Rand...

基础算法(2):快速排序(随机划分+三数取中划分+ 随机三数取中划分+尾递归)

快速排序:                  简介:快速排序是一种排序算法,包含n个数的输入数组,最坏情况为O(n^2),但是平均性能非常好:期望运行时间为O(n*lg(n))。           ...

python模拟栈的操作实现非递归方式的快速排序算法

今天在做题的时候突然想到一个问题,递归写出来的算法是否可以改成非递归的形式,查了一些资料发现:网上很多都说只要是递归可以写成的程序都是可以改成非递归形式的,关于递归的算法有很多的说法 递归的优点: ...

快速排序算法原理及java递归实现

快速排序 对冒泡排序的一种改进,若初始记录序列按关键字有序或基本有序,蜕化为冒泡排序。使用的是递归原理,在所有同数量级O(n longn) 的排序方法中,其平均性能最好。就平均时间而言,是目前被认为最...

[算法入门]快速排序非递归方法(Java实现),大家一起来找茬啊~

基础总结一下,快速排序的步骤: 1、找到一个key值(就是数组第一个值),先从右到左找,找到一个比它小的值,记录下标。 2、然后从左往右找,找到一个比它大的值,记录下标。 3、交换找到的两个数字...

快速排序(三种算法实现和非递归实现)

快速排序(Quick Sort)是对冒泡排序的一种改进,基本思想是选取一个记录作为枢轴,经过一趟排序,将整段序列分为两个部分,其中一部分的值都小于枢轴,另一部分都大于枢轴。然后继续对这两部分继续进行排...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:计算机算法之快速排序、原址排序、递归的最好应用
举报原因:
原因补充:

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