快速排序-(交换排序)
2017-08-21 23:10
190 查看
思想:
图片过程
![](https://img-blog.csdn.net/20170821222014927?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveW91dGhfc2hvdXRpbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
例子: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位置
5)现在就是用函数的递归调用又同上面的思想一样将23,12,7和78,45两组数据进行排序
代码如下:
运行截图:
图片过程
例子: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.快速排序
- 交换排序之快速排序
- 交换排序的实现——快速排序
- 交换排序--快速排序
- 排序算法(交换排序)——快速排序
- 交换排序(快速排序 冒泡排序)
- 交换排序-快速排序
- 交换排序——冒泡排序和快速排序,C++代码实现
- 10.3交换排序(2)快速排序
- 交换排序之快速排序
- 交换排序----冒泡排序 和 快速排序
- 快速排序的两种改进方法算法及topK问题求解
- 快速排序
- 快速排序代码
- 插入排序、冒泡排序、选择排序、快速排序、堆排序、归并排序算法比较
- 归并排序学习总结,递归法&&插入排序&&冒泡排序&&选择排序&&快速排序
- 数据结构实验之排序八:快速排序
- 《算法导论》学习总结——第二部分3快速排序