排序算法-快速排序(quickSort)-C
2021/6/11 20:21:34
本文主要是介绍排序算法-快速排序(quickSort)-C,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
思路:
快速排序也是一种分治的递归思想。通过选取一个枢纽元,将数组分成两个子数组,一个子数组大于该枢纽元,另一个子数组小于该枢纽元,然后对这两个子数组递归使用该方法排序,当一个数组元素很小时,可以使用插入排序对小数组中的元素排序。
基本步骤:
- 如果数组中的元素个数是0或1,则返回;
- 在数组中选取一个元素,作为枢纽元;
- 将数组中除了枢纽元外的元素,分为两部分,一部分大于该枢纽元,一部分小于该枢纽元;
- 将划分后的两个部分继续使用该方法排序,直到所有元素均已排序。
时间复杂度:
最好: ;平均: ;最坏:
程序:
int swap(int *a,int *b) { int tmp; tmp=*a; *a=*b; *b=tmp; } int median3(int array[],int left,int right) { int tmp; int center=(left+right)/2; if(array[left]>array[center]) //这里用选择排序给数组开始,中间,和结尾三个位置的元素排序 { tmp=array[left]; array[left]=array[center]; array[center]=tmp; } if(array[left]>array[right]) { tmp=array[left]; array[left]=array[right]; array[right]=tmp; } if(array[center]>array[right]) { tmp=array[center]; array[center]=array[right]; array[right]=tmp; } swap(&array[center],&array[right-1]); return array[right-1]; } void insert_sort(int array[],int array_size) { int i,j,tmp; for(i=1;i<array_size;i++) { tmp=array[i]; for(j=i;j>0&&array[j-1]>tmp;j--) array[j]=array[j-1]; array[j]=tmp; } } void quick_sort_recursion(int array[],int left,int right) { int middle, i,j; if((right-left)<2) return; if((right-left)>5) //由于数组元素太少使用快速排序效率很低,所以元素大于6个使用快速排序,元素小于6个使用插入排序 { i=left; j=right-1; middle=median3(array,left,right); while(1) { while(middle>array[++i]) {} while(middle<array[--j]) {} if(i<j) swap(&array[i],&array[j]); else break; } swap(&array[i],&array[right-1]); quick_sort_recursion(array,left,i-1); quick_sort_recursion(array,i+1,right); } else insert_sort(array+left,right-left+1); } void quick_sort(int array[],int array_size) { quick_sort_recursion(array,0,array_size-1); }
#include <stdio.h> #include <stdlib.h> int main() { int i; int array[]={100,96,88,75,63,52,41,36,28,96,19,6,0,-19,-105,28,52,52,52}; int array_size=sizeof(array)/sizeof(int); printf("Original array:\n"); for(i=0;i<array_size;i++) printf(" %d, ",array[i]); printf("\n"); quick_sort(array,array_size); printf("Sorted array:\n"); for(i=0;i<array_size;i++) printf(" %d, ",array[i]); printf("\n"); return 0; }
参考:
https://www.cnblogs.com/onepixel/articles/7674659.html
https://www.runoob.com/w3cnote/ten-sorting-algorithm.html
这篇关于排序算法-快速排序(quickSort)-C的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-22怎么通过控制台去看我的页面渲染的内容在哪个文件中呢-icode9专业技术文章分享
- 2024-12-22el-tabs 组件只被引用了一次,但有时会渲染两次是什么原因?-icode9专业技术文章分享
- 2024-12-22wordpress有哪些好的安全插件?-icode9专业技术文章分享
- 2024-12-22wordpress如何查看系统有哪些cron任务?-icode9专业技术文章分享
- 2024-12-21Svg Sprite Icon教程:轻松入门与应用指南
- 2024-12-20Excel数据导出实战:新手必学的简单教程
- 2024-12-20RBAC的权限实战:新手入门教程
- 2024-12-20Svg Sprite Icon实战:从入门到上手的全面指南
- 2024-12-20LCD1602显示模块详解
- 2024-12-20利用Gemini构建处理各种PDF文档的Document AI管道