排序算法之 —— 快速排序(五)
2016-07-16 22:57
399 查看
#include<iostream> #include<stdio.h> #include<stdlib.h> #define len 10 void Show(int str[],int length); void Quick_sort(int str[],int length); void quick_sort(int str[],int left,int right); using namespace std; void Show(int str[],int length) { int i; for(i = 0;i <length ;i++) { printf(" %d",str[i]); } } void quick_sort(int str[],int left,int right) { if(left < right) { int i = left; int j = right; int value = str[left]; while( i < j) { while(i < j && str[j] >= value) { j--; } if(i <j) { str[i++] = str[j]; } while(i <j && str[i] <= value ) { i++; } if(i < j) { str[j--] = str[i]; } } str[i] = value; quick_sort(str,left,i - 1); quick_sort(str,i+1,right); } } void Quick_sort(int str[],int length) { quick_sort(str,0,length); } int main() { int str[len]; int i ; for(i = 0; i < len; i++) { str[i] = rand()%100; } printf("排序前:\n"); Show(str,len); printf("\n"); printf("排序后:\n"); Quick_sort(str,len); Show(str,len); return 0; } 排序前: 41 67 34 0 69 24 78 58 62 64 排序后: 0 24 34 41 58 62 64 67 69 78Press any key to continue
程序解读: 41 67 34 0 69 24 78 58 62 64 1.挖空位 value = str[left] i = left ; j = right 2. j-- 由后向前找比他小的数,找到之后挖出此数填在前一个 坑中str[i] 3 . i++ 由前向后找比他大的数,找到后,也将它填在前一个坑中 str[j] 4 .再重复 2 3 步 ,直至 i == j ,将基数填在str[i] 5,进行分治算法 递归调用: quick(str ,left,i-1); quick_sort(str,i+1,right) 可以看出,经过一次后,基数前的都比它小,基数后的都比它大 41 67 34 0 69 24 78 58 62 64 1 .value str[0] = 41 __ 67 34 0 69 24 78 58 62 64 i j 2. j-- 找比41 小的数 24 ----> 下标 5 将 str[0] = str[5] = 24 str[5]形成新的空位 i++; 24 67 34 0 69 __ 78 58 62 64 i j 3. i++ 找比41 大的数 67 -----> 下标 1 将 str[5] = str[1] = 67 str[1] 形成新坑 j-- 24 __ 34 0 69 67 78 58 62 64 i j 4 j-- 找比41 小的数 0 ----> 下标 3 将 str[1] = str[3] = 0 str[3] 形成新坑 i++ 24 0 34 __ 69 67 78 58 62 64 i j 5. i++ 找比41 大的数 while(i == j) 退出 将基数填入坑中 24 0 34 **41** 69 67 78 58 62 64 可见 基数前的都比它小,基数后的都比它大 最后 进行分治算法 递归调用: quick(str ,left,i-1); quick_sort(str,i+1,right)
相关文章推荐
- JavaScript演示排序算法
- 快速排序
- C#快速排序算法实例分析
- C#递归算法之快速排序
- 算法之排序算法的算法思想和使用场景总结
- C++快速排序的分析与优化详解
- PHP版本常用的排序算法汇总
- php快速排序原理与实现方法分析
- JavaScript实现多种排序算法
- js实现数组冒泡排序、快速排序原理
- php简单实现快速排序的方法
- Java 快速排序(QuickSort)原理及实现代码
- 快速排序和分治排序介绍
- java 算法之快速排序实现代码
- php 地区分类排序算法
- js三种排序算法分享
- Javascript中的常见排序算法
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
- Java实现快速排序算法(Quicktsort)
- Java中的数组排序方式(快速排序、冒泡排序、选择排序)