快速排序
2016-05-24 19:42
155 查看
快速排序思想:以一维数组为例,选择最左边的元素为基准点,先从右往左找小于基准点的数,再从左往右找大于基准点的数,然后交换他们。再继续……直到两个索引相等的时候相遇了,交换相遇这个点和基准点的值,再以此为中点分成两个部分(二分法),对这两部分再次重复上述操作……直到不能再分。
输入以及运行结果:
Please input numbers of elements in the array:
8
Please input 0 element in the array:
96
Please input 1 element in the array:
69
Please input 2 element in the array:
36
Please input 3 element in the array:
56
Please input 4 element in the array:
24
Please input 5 element in the array:
85
Please input 6 element in the array:
35
Please input 7 element in the array:
75
24 35 36 56 69 75 85 96 Press any key to continue
#include <stdio.h> int array[100],num; void quicksort(int left,int right) { int base,i,j,temp; if(left > right) re 4000 turn; i = left; j = right; base = array[left];//最左边作为基准点并保存基准点的值 while(i != j) //当两个索引没有相遇时,一直检索 { while(array[j] >= base && i < j)//先从右往左 j--; while(array[i] <= base && i < j)//再从左往右 i++; if(i < j)//两个循环都跳出了,并且索引没有相遇,交换两个值 { temp = array[j]; array[j] = array[i]; array[i] = temp; } }//跳出了循环说明两个索引的值相遇了 array[left] = array[i];//交换两遍索引相遇的点和原来基准点的值 array[i] = base; //检索一趟相遇后就二分再检索 quicksort(left,i-1);//二分法,把数组分成两个部分,每部分继续 quicksort(i+1,right); return; } int main() { int i; printf("Please input numbers of elements in the array:\n"); scanf("%d",&num); for(i=0;i<num;i++) { printf("Please input %d element in the array:\n",i); scanf("%d",&array[i]); } quicksort(0,num-1); for(i=0;i<num;i++) { printf("%d ",array[i]); } return 0; }
输入以及运行结果:
Please input numbers of elements in the array:
8
Please input 0 element in the array:
96
Please input 1 element in the array:
69
Please input 2 element in the array:
36
Please input 3 element in the array:
56
Please input 4 element in the array:
24
Please input 5 element in the array:
85
Please input 6 element in the array:
35
Please input 7 element in the array:
75
24 35 36 56 69 75 85 96 Press any key to continue
相关文章推荐
- 快速排序
- C#快速排序算法实例分析
- C++快速排序的分析与优化详解
- js实现数组冒泡排序、快速排序原理
- php简单实现快速排序的方法
- Java 快速排序(QuickSort)原理及实现代码
- 快速排序和分治排序介绍
- java 算法之快速排序实现代码
- Java实现快速排序算法(Quicktsort)
- Java中的数组排序方式(快速排序、冒泡排序、选择排序)
- 快速排序的原理及java代码实现
- C/C++实现快速排序的方法
- c语言实现冒泡排序、希尔排序等多种算法示例
- 深入单链表的快速排序详解
- C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- JavaScript实现快速排序的方法
- C#使用委托实现的快速排序算法实例
- C语言的冒泡排序和快速排序算法使用实例
- javascript与Python快速排序实例对比
- php实现快速排序的三种方法分享