基础篇,排序(冒泡排序,快速排序)
快速排序的基本思想:挖坑填数+分治法
- 从序列当中选择一个基准数(pivot)
在这里我们选择序列当中第一个数最为基准数
- 将序列当中的所有数依次遍历,比基准数大的位于其右侧,比基准数小的位于其左侧
- 重复步骤1.2,直到所有子集当中只有一个元素为止。
用伪代码描述如下:
1.i =L; j = R; 将基准数挖出形成第一个坑a[i]。
2.j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。
3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。
4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中
//左分区 < 基准 < 右分区 void qsort(int *array, int left,int right) { if(left < right) { int point = array[left];//设置基准 int low = left; //设置分区最左值 int hight = right; //设置分区最右值 // cout<<point<<low<<hight<<endl; while(low < hight) { while((low<hight) && (point <= array[hight])) --hight; // cout<<hight<<endl; array[low] = array[hight]; //找到右分区比基准值小的,替换基准值元素原有数据 while((low<hight) && (point > array[low])) ++low; //找到左分区比基准值大的值,替换该值元素到原来 hight的位置 // cout<<low<<endl; array[hight] = array[low]; //找到右分区比基准值小的,替换基准值元素原有数据 } array[low] = point; qsort(array, left, low-1); qsort(array, low+1, right); } } int main() { int a[] = {2,4,6,23,56,25,8,21,32,5,7,9}; int lenght = sizeof(a)/sizeof(int)-1; cout<<lenght<<endl; qsort(a, 0, lenght); for(int i=0; i<lenght;++i) { cout<<a[i]<<" "; } cout<<" "<<endl; }
冒泡排序思路比较简单: 将序列当中的左右元素,依次比较,保证右边的元素始终大于左边的元素; ( 第一轮结束后,序列最后一个元素一定是当前序列的最大值;) 对序列当中剩下的n-1个元素再次执行步骤1。 对于长度为n的序列,一共需要执行n-1轮比较 (利用while循环可以减少执行次数) *代码实现 #冒泡排序 def bubble_sort(L): length = len(L) #序列长度为length,需要执行length-1轮交换 for x in range(1,length): #对于每一轮交换,都将序列当中的左右元素进行比较 #每轮交换当中,由于序列最后的元素一定是最大的,因此每轮循环到序列未排序的位置即可 for i in range(0,length-x): if L[i] > L[i+1]: temp = L[i] L[i] = L[i+1] L[i+1] = temp
每一成功的背后都有个人的努力和家人的支持
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器