排序算法5——快速排序

来源:互联网 发布:淘宝双12页面怎么设置 编辑:程序博客网 时间:2024/05/16 02:15

快速排序(Quick Sort)和冒泡排序法类似,都是基于交换的排序思想,其排序流程如下:

1.首先设定一个分界值,通过该分界值将数组分为左右两个部分。

2.将小于等于分界值的元素放到数组左边,大于等于分界值的元素放到数组右边。

3.然后,左边和右边的元素又可以按照第二步的方法独立排序。

4.不断重复以上过程,直到每个部分都排序完成了。

在这里就不分析其具体的算法执行过程了,直接附源代码,大家看懂源码就可以了。

#include<stdio.h>#include<malloc.h>void QuickSort(int *a,int left,int right);void main(){int len;int *a;while(1){printf("输入该排序数组长度:");scanf("%d",&len);a=(int*)malloc(len*sizeof(int));printf("输入数组各元素:\n");for(int i=0;i<len;i++){scanf("%d",a+i);}QuickSort(a,0,len-1);printf("排序后:\n");for(int j=0;j<len;j++){printf("%d  ",a[j]);if(j==len-1) printf("\n");}}free((void*)a);}void QuickSort(int *a,int left,int right){int ltemp=left;int rtemp=right;//temp为临界值int temp=a[left];while(ltemp<rtemp){//找到左边大于临界值的元素while(a[ltemp]<temp){ltemp++;}//找到右边小于临界值的元素while(a[rtemp]>temp){rtemp--;}if(ltemp<rtemp){//通过异或运算交换数组的两个元素a[ltemp]=a[ltemp]^a[rtemp];a[rtemp]=a[ltemp]^a[rtemp];a[ltemp]=a[ltemp]^a[rtemp];ltemp++;rtemp--;}}if(ltemp==rtemp) ltemp++;if(left<rtemp){QuickSort(a,left,ltemp-1);}if(ltemp<right){QuickSort(a,rtemp+1,right);}}
执行截图如下:

快速排序截图

快速排序是很重要的一个排序算法,它就有比较高的执行效率,学习排序算法的人都应该掌握。

希望大家可以多多指正我的程序或者算法思想上的错误,大家一起学习,一起进步。

0 0