快速排序
时间:2022-04-22
本文章向大家介绍快速排序,主要内容包括算法思想:、主要代码:、全部代码:、运行实例:、基本概念、基础应用、原理机制和需要注意的事项等,并结合实例形式分析了其使用技巧,希望通过本文能帮助到大家理解应用这部分内容。
快速排序时间复杂度为O(nlogn),由于是在原数组上面利用替换来实现,因此不需要额外的存储空间。
算法思想:
通过设置一个岗哨,每次跟这个岗哨进行比较,比他小的放在左边,比他大的放在右边。再对岗哨左边的数组0----middle-1,和middle+1-----end,进行同样的排序。
主要代码:
void QuikSort(int *arr,int begin,int end){
int middle;
if(begin < end){
middle = Patition(arr,begin,end);
QuikSort(arr,0,middle-1);
QuikSort(arr,middle+1,end);
}
}
int Patition(int * arr,int begin,int end){
int middle = arr[begin];
int tmp;
while(begin < end){
while(begin < end && arr[end] >= middle)
end--;
tmp = arr[end];
arr[end] = arr[begin];
arr[begin] = tmp;
while(begin<end && arr[begin] <= middle)
begin++;
tmp = arr[end];
arr[end] = arr[begin];
arr[begin] = tmp;
}
return begin;
}
全部代码:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int arrtest1[10] = {4,3,7,8,0,9,1,2,6,5};
int arrtest2[10] = {0,1,2,3,4,5,6,7,8,9};
int arrtest3[10] = {9,8,7,6,5,4,3,2,1,0};
void copy(int *from,int *arr,int length);
void print(int *arr,int length);
void QuikSort(int *arr,int begin,int length);
int Patition(int * arr,int begin,int end);
int main(){
int Arr[10],i;
copy(arrtest1,Arr,10);
print(Arr,10);
QuikSort(Arr,0,9);
print(Arr,10);
getchar();
return 0;
}
void QuikSort(int *arr,int begin,int end){
int middle;
if(begin < end){
middle = Patition(arr,begin,end);
QuikSort(arr,0,middle-1);
QuikSort(arr,middle+1,end);
}
}
int Patition(int * arr,int begin,int end){
int middle = arr[begin];
int tmp;
while(begin < end){
while(begin < end && arr[end] >= middle)
end--;
tmp = arr[end];
arr[end] = arr[begin];
arr[begin] = tmp;
while(begin<end && arr[begin] <= middle)
begin++;
tmp = arr[end];
arr[end] = arr[begin];
arr[begin] = tmp;
}
return begin;
}
void copy(int *from,int *arr,int length){
int i;
for(i=0;i<length;i++){
arr[i] = from[i];
}
}
void print(int *arr,int length){
int i;
for(i=0;i<length;i++){
printf("%d ",arr[i]);
}
printf("n");
}
运行实例:
- Javascript缓存投毒学习与实战
- 【Java学习笔记之十】Java中循环语句foreach使用总结及foreach写法失效的问题
- Codeforces 839B Game of the Rows【贪心】
- Codeforces 839A Arya and Bran【暴力】
- 【Java学习笔记之十一】Java中常用的8大排序算法详解总结
- 浅谈zip格式处理逻辑漏洞
- C/C++中peek函数的原理及应用
- 洛谷 P1200 [USACO1.1]你的飞碟在这儿Your Ride Is He…【字符串+模拟】
- 洛谷 P1055 ISBN号码【字符串+模拟】
- 【Java学习笔记之十二】Java8增强的工具类:Arrays的用法整理总结
- 利用insert,update和delete注入获取数据
- 【机器学习笔记之二】决策树的python实现
- 【Java学习笔记之十三】初探Java面向对象的过程及代码实现
- 洛谷 P1308 统计单词数【字符串+模拟】
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法