快速排序(数组和链表版本)
来源:互联网 发布:苹果怎么软件更新 编辑:程序博客网 时间:2024/06/16 23:48
快速排序:
如果在数组已经是升序降序的情况下,可能会出现n^2 的复杂度,可在预先处理
枢纽元的选取也有多种方式
第一个区间第一个数字
区间最后一个数字
区间第一个数字,最后一个数字,中间位置的数字,这三个数的中位数为做枢纽元,一般来说 第三种会会使快排的效率好些
时间复杂度:O(NlogN) 最坏情况下O(N*N)
空间复杂度:O(logN)
#include <stdio.h>void qsort(int* a, int le, int ri){ if(le >= ri) return; int i = le, j = ri; int p = a[le]; while(i < j){ while(a[j] > p && j > i ) j--; if(i < j){ a[i] = a[j]; i++; } while(a[i] < p && i < j) i++; if(i < j){ a[j] = a[i]; j--; } } a[i] = p; qsort(a,le,i-1); qsort(a,i+1, ri);}int main() { int a[10] = {1,6,2,9,5,2,4,8,5,7}; qsort(a,0,9); int i=0; for(i=0; i<10; i++){ printf("%d\n", a[i]); } return 0;}
//链表般的快速排序
void qSort(node * head,node * tail){ if(head == NULL || head == tail) return; node* le = head, * ri = tail; int p = head->val; while(le != ri){ while(le != ri && ri->val > p) ri = ri->pre; if(le != ri){ le->val = ri->val; le = le->next; } while(le != ri && le->val < p) le = le->next; if(le != ri){ ri->val = le->val; ri = ri->pre; } } le->val = p; if(head != le) qSort(head,le->pre); if(le != tail) qSort(le->next,tail); }
- 快速排序(数组和链表版本)
- 快速排序(数组和链表)
- 数组和快速排序
- 数组的插入排序和快速排序
- 数组冒泡排序 和 快速排序
- 快速排序(递归版本)
- 快速排序(整型版本)
- 快速排序(递归版本)
- 快速排序(随机化版本)
- 快速排序(随机化版本)
- 快速排序 普通和随机版本
- 快速排序-c++(分别用数组和容器实现)
- 快速排序(二维数组)
- 数组(五)--快速排序
- 数组去重和快速排序
- php关联数组排序(快速排序)
- 数组排序-快速排序
- 单向链表排序:快速排序和归并排序
- 完美解决json循环问题(使用javassist增强):Spring MVC中使用jackson的MixInAnnotations方法动态过滤JSON字段
- Detours使用说明
- 查看一下oracle数据库软件已经安装的组件(视图dba_registry)
- ubuntu12.04 nfs 服务器的配置
- 大学英语六级听力——006(Physical activity)
- 快速排序(数组和链表版本)
- 手机史上9大技术突破:触屏机93年诞生
- linux下使用lftp的小结
- tomcat数据源配置小记
- extjs4.2 bar图 柱子自动对齐问题解决方法
- libuv - 监视器watchers
- IOS Autolayout(VFL) 处理子视图居中
- 不要再如此疲劳的工作了
- 鱼香肉丝