快速排序详解

来源:互联网 发布:三星ml1861清零软件 编辑:程序博客网 时间:2024/06/09 16:08

快速排序:

        快速排序和其他排序方法一样,都是为了将数据进行简洁又快速的排序。

其基本的实现方法其实就是经过一次排序算法之后,先简单地将数据分成两部分:取一个中间数(一般为第一个元素),以这个中间数为中心,左边的数为比这个中间数大的数,右边的数为比这个中间数小的数。之后再进行递归算法,分别处理已经分好的两堆数据。直到最后得到我们想要的排好序的数组。

基本步骤:

1.先确定一个对比数(中间数),一般为第一个元素。

2.取连个变量iji为下标的数字为这个数组的第一个元素,j为下标的数字为这个数组的最后一个元素。

3.首先从后向前开始进行比较,即最后一个元素与中间数比较,如果最后一个元素的值大于第一个元素,j--,继续进行比较,如果j为下标的元素的值小于第一个元素,将最后一个元素的值赋给第一个元素。结束这一次比较。

4.开始从前往后进行比较,如果第一个数的值小于中间数,i++,接着进行比较,如果i为下标的元素的值大于中间数,将这个数字的值赋给j为下标的元素。结束这一次比较。

5.重复34步骤,直至i>=j

文字描述可能不是很清楚,我们通过一个图来说明:


通过程序来实现这个算法:

#include <stdio.h> void QuickSort(int arr[], int left, int right) {int i = left;int j = right;int tmp = arr[i];if(i < j){while(i < j){while((arr[j] > tmp)&&(i < j)){j--;}arr[i] = arr[j];while((arr[i] < tmp)&&(i < j)){i++;}arr[j] = arr[i];}arr[i] = tmp;QuickSort(arr, left, i-1);QuickSort(arr, j+1, right);}else{return;} }int main(){int i = 0;int arr[9] = {5,6,7,1,4,9,3,2,8};printf("未排序前:");for(i = 0; i<9; i++){printf("%d ",arr[i]);}printf("\n");printf("\n");QuickSort(arr, 0, 8);printf("实现排序之后:");for(i = 0; i<9; i++){printf("%d ",arr[i]);}printf("\n");return 0;}

实现截图:


        当然,排序算法有许多的表现方式,这只是其中的一种而已,欢迎各位前来共同探讨。

原创粉丝点击