快速排序 解析
来源:互联网 发布:网络劫持软件 编辑:程序博客网 时间:2024/05/16 05:17
快速排序法原理也是用了分治法,主要原理是将数组分为A[p..q-1] 和A[q+1..r],然后调整元素使得A[p..q-1]小于等于q,也小于等于A[q+1..r]。然后不断的递归,到最后就排序完成。
上代码:
// QuickSort.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include<iostream>using namespace std;/*函数声明*/void QuickSort(int *A,int p,int r);//快速排序int Partition(int *A,int p,int r);//分治法void Display(int *a,int size);//打印函数/*主函数*/int _tmain(int argc, _TCHAR* argv[]){int size,*a;while(1){cout<<"输入字符串长度:"<<endl;cin>>size;if(size > 0) {cout<<"请输入"<<size<<"个待排序数字:"<<endl;a = (int*)malloc(size*sizeof(int)); //a = new int [size];for(int i=0; i<size; i++) //输入数组{cin>>a[i];}QuickSort(a,0,size-1); //调用快速排序函数}elsecout<<"输入长度错误!"<<endl;Display(a,size); //打印数组}return 0;}/*函数定义*/void QuickSort(int *A,int p,int r) //快速排序{int q;if(p<r) //如果p大于等于r 那么就程序不执行{q = Partition(A,p,r); //调用分治法 找到q的值QuickSort(A,p,q-1);QuickSort(A,q+1,r);}}int Partition(int *A,int p,int r) //分治法,作用就是将数组分为A[p..q-1] 和A[q+1..r]{//然后调整元素使得A[p..q-1]小于等于q,也小于等于A[q+1..r]int x,i,j,temp;x = A[r]; //将最后一个值保存在x中i = p-1; //开始的时候将i 移动到数组的外面for( j=p; j<=r-1; j++){if(A[j]<=x){i +=1;temp = A[i]; //exchangeA[i] = A[j];A[j] = temp;}}temp = A[i+1]; //exchangeA[i+1] = A[r];A[r] = temp;return i+1; //返回q值}void Display(int *a,int size) //打印函数{ cout<<"排序结果为:"<<endl;for(int i=0; i<size; i++) //打印数组{cout<<a[i]<<" ";}cout<<endl<<endl;}
下面我们测试一组数组: 2 8 7 1 3 5 6 4
其中第一次分治法调用示意图如下:
- 快速排序算法解析
- 快速排序 解析
- 快速排序法 解析
- 快速排序算法解析
- 快速排序 解析
- 快速排序 解析
- 快速排序 解析
- 快速排序解析
- 快速排序解析 Java
- 快速排序算法解析
- 快速排序解析
- 快速排序解析
- 快速排序解析
- 快速排序-深入解析
- 快速排序,堆排序解析
- 快速排序分治算法解析
- 排序算法解析--冒泡排序,选择排序,快速排序
- 快速排序原理解析及实例应用
- 第一天学习LINQ
- pthread/Linux多线程编程
- 手机阅读类软件的36种配色方案
- PCB 工艺流程
- 新浪旧事-svn服务端配置及在MyEclipse中的使用
- 快速排序 解析
- 电器元件
- μm 和μin和 μinch关系
- 户外运动知识记录
- 使用UTL_MAIL包实现存储过程邮件发送
- 工信部发布2013年“核高基”课题申报通知
- Opencv基础教程笔记 1
- 03-06 创建和编辑AutoCAD实体(六) 保存和恢复图层状态
- Xerces C++ SAX解析XML文档