快速排序-(交换排序)
来源:互联网 发布:蓝小雨冠军销售 淘宝 编辑:程序博客网 时间:2024/05/21 07:58
思想:
图片过程
例子:32,12,7,78,23,45
1)首先找一个值作为轴,一般就选数组的第一个值(arr[0]中的值)key=32
2)第一步从数组最后一个值向前遍历找比key小的值(right指向的值23)找到后与数组前面的值交换(left指的32交换)
3)第二步就是反过来从左边找比key大的值(left指向的值78)找到后与数组后面的值交换(right指的23交换)
4)left与right位置重合后不用交换将key的值赋在pos位置
现在数组中情况是:“23,12,7” 32 “78,45”以32为分界又有两组无序数
5)现在就是用函数的递归调用又同上面的思想一样将23,12,7和78,45两组数据进行排序
代码如下:
#include <stdio.h>void Quick_sort(int arr[], int left, int right){ int i, j, key, m; if (left < right) { i = left; j = right; key = arr[i]; while (i<j&&arr[j]>key)//在数组右边找到比key大的值 j--; if (i < j)//将右边比key大的值arr[j]与arr[i]交换 { m = arr[i]; arr[i] = arr[j]; arr[j] = m; i++; } while (i < j&&arr[i] <= key)//在数组左边找到比key小的值 i++; if (i < j)//将左边比key小的值arr[j]与arr[i]交换 { m = arr[j]; arr[j] = arr[i]; arr[i] = m; j--; } arr[i] = key; Quick_sort(arr, 0, i - 1); Quick_sort(arr, i + 1, right); }}int main(){ int i; int arr[6] = { 32,12,7,78,23,45}; Quick_sort(arr, 0, 5);//因为数组的第五个单元就是第6个数啦 for (i = 0; i < 6; i++) printf("%d ", arr[i]); printf("\n"); return 0;}
运行截图:
阅读全文
2 0
- 快速排序-(交换排序)
- 交换排序(冒泡排序、快速排序)
- 排序6:交换排序(快速排序)
- 交换排序(冒泡排序、快速排序)
- 交换排序(快速排序 冒泡排序)
- 交换排序(冒泡排序--快速排序)
- 交换排序--快速排序
- 交换排序:快速排序
- 交换排序-快速排序
- 交换排序-快速排序
- 交换排序------快速排序
- 【交换排序】快速排序
- 交换排序---快速排序
- 交换排序-快速排序
- 交换排序-快速排序
- 交换排序--快速排序
- 交换排序-快速排序
- 交换排序-(冒泡、快速排序)
- 第五章 处理器拦截器详解——跟着开涛学SpringMVC
- 区间DP模板
- TPO阅读总结
- JavaScript中的BOM(浏览器对象模型)
- 2017北大信科夏令营机试C:岛屿面积
- 快速排序-(交换排序)
- 可以从CSS框架中借鉴到什么
- Struts 2的基石——拦截器(Interceptor)
- CodeForces
- javascript实现冒泡排序
- shell脚本入门 —— 符号篇
- 事件委托
- 按钮刷新的方法
- Spring MVC