冒泡排序和快速排序
2016-03-20 22:58
323 查看
#pragma mark - #pragma mark 冒泡排序(选择排序) void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void bubbleSort(int a[], int length) { while (length > 0) { bool temp = false; for (int i = 0; i < length; i++) { if (a[i+1] < a[i]) { swap(&a[i+1], &a[i]); temp = true; } } //简单优化,对于已经有序的序列,省去接下的循环。对于这种优化,实际还需考虑,多了赋值和判断操作。 if (!temp) { break; } length--; print(a, length); } }
直接来段代码,冒泡排序是比较常见的排序算法。其原理是依次两两比较,将较大的往后排。将最大的排到最后,再对前面的序列做同样的操作。
#pragma mark -
#pragma mark 快速排序
int patition(int a[], int m, int n) {
int x = a[m];
while (n > m) {
while (n > m && a
>= x) n--;
swap(&a[m], &a
);
while (n > m && a[m] <= x) m++;
swap(&a[m], &a
);
}
print(a, 8);
return m;
}
void sort(int a[], int m, int n) {
if (m < n) {
int location = patition(a, m, n);
sort(a, m, location-1);
sort(a, location+1, n);
}
}
void quickSort(int a[], int length) {
sort(a, 0, length-1);
}
快速排序的使用比较多,递归实现。以一个数据为基准,大于该数据的放在右边,小于该数据的放在左边。然后对左右的序列继续同样的操作。
时间复杂度:
冒泡排序的时间复杂度为O(n^2);
快速排序的时间复杂度为O(n*log(2)n)
以上都是平均状态下。相对堆排序较为稳定O(n*log(2)n)。
相关文章推荐
- 软件破解技术之API替换
- hdu5646(数学)
- Android 应用界面开发笔记 自定义控件与Handler -待更新
- CURSOR Expressions
- jquery实现点击复制到剪切板
- OneZero第一次随感
- 深拷贝与浅拷贝
- 第二周学习问题总结
- 设计模式——工厂模式
- String类的深拷贝
- 详解C++的JSON静态链接库JsonCpp的使用方法
- Android5.x 新控件之RecyclerView使用总结
- 单线程模型中Message,Handler,MessageQueue,Looper之间的关系
- iOS中Cookie的使用
- RingBuffer
- linux 学习计划
- 修改用户名 及 可能出现的问题
- SYS_REFCURSOR & REF CURSOR
- Spring AOP进行日志记录,管理
- 影响黄金价格的因素