当前位置:首页 > > 21ic电子网
[导读]一、冒泡排序冒泡排序(BubbleSort),是一种计算机科学领域的较简单的排序算法。它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排...


一、冒泡排序
冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。

它重复地走访过要排序的元素列,依次比较两个相邻的元素,如果他们的顺序(如从大到小、首字母从A到Z)错误就把他们交换过来。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素列已经排序完成。
以下代码可以直接运行:

#include using namespace std;template<typename T>//整数或浮点数皆可使用void bubble_sort(T arr[], int len){ int i, j; T temp; for (i = 0; i < len - 1; i ) for (j = 0; j < len - 1 - i; j ) if (arr[j] > arr[j 1]) { temp = arr[j]; arr[j] = arr[j 1]; arr[j 1] = temp; }}int main(){ int arr[] = { 61, 17, 29, 22, 34, 60, 72, 21, 50, 1, 62 }; int len = (int) sizeof(arr) / sizeof(*arr); bubble_sort(arr, len); for (int i = 0; i < len; i ) cout << arr[i] << ' '; cout << endl; float arrf[] = { 17.5, 19.1, 0.6, 1.9, 10.5, 12.4, 3.8, 19.7, 1.5, 25.4, 28.6, 4.4, 23.8, 5.4 }; len = (int) sizeof(arrf) / sizeof(*arrf); bubble_sort(arrf, len); for (int i = 0; i < len; i ) cout << arrf[i] << ' '; return 0;}
二、快速排序
快速排序(Quicksort)是对冒泡排序的一种改进。

快速排序的思想是:
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
以下代码可以直接运行:

#include using namespace std; void Qsort(int arr[], int low, int high){ if (high <= low) return; int i = low; int j = high 1; int key = arr[low]; while (true) { /*从左向右找比key大的值*/ while (arr[ i] < key) { if (i == high){ break; } } /*从右向左找比key小的值*/ while (arr[--j] > key) { if (j == low){ break; } } if (i >= j) break; /*交换i,j对应的值*/ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } /*中枢值与j对应值交换*/ int temp = arr[low]; arr[low] = arr[j]; arr[j] = temp; Qsort(arr, low, j - 1); Qsort(arr, j 1, high);} int main(){ int a[] = {57, 68, 59, 52, 72, 28, 96, 33, 24}; Qsort(a, 0, sizeof(a) / sizeof(a[0]) - 1);/*这里原文第三个参数要减1否则内存越界*/ for(int i = 0; i < sizeof(a) / sizeof(a[0]); i ) { cout << a[i] << ""; } return 0;}/*参考数据结构p274(清华大学出版社,严蔚敏)*/
三、桶排序
桶排序(Bucket sort)或所谓的箱排序,是一个排序算法,工作的原理是将数组分到有限数量的桶子里。
每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳结果。当要被排序的数组内的数值是均匀分配的时候,桶排序使用线性时间(Θ(n))。但桶排序并不是 比较排序,他不受到 O(n log n) 下限的影响。
以下代码可以直接运行:

#includeusingnamespace std;int a[]={1,255,8,6,25,47,14,35,58,75,96,158,657};const int len=sizeof(a)/sizeof(int);int b[10][len 1]={0};//将b全部置0void bucketSort(int a[]);//桶排序函数void distribute Elments(int a[],int b[10][len 1],int digits);void collectElments(int a[],int b[10][len 1]);int numOfDigits(int a[]);void zeroBucket(int b[10][len 1]);//将b数组中的全部元素置0int main(){cout<<"原始数组:";for(int i=0;icout<",";cout<<endl;bucketSort(a);cout<<"排序后数组:";for(int i=0;icout<",";cout<<endl;return 0;}void bucketSort(int a[]){int digits=numOfDigits(a);for(int i=1;i<=digits;i ){distributeElments(a,b,i);collectElments(a,b);if(i!=digits)zeroBucket(b);}}int numOfDigits(int a[]){int largest=0;for(int i=0;i//获取最大值if(a[i]>largest)largest=a[i];int digits=0;//digits为最大值的位数while(largest){digits ;largest/=10;}return digits;}void distributeElments(int a[],int b[10][len 1],int digits){int divisor=10;//除数for(int i=1;idivisor*=10;for(int j=0;j{int numOfDigist=(a[j]%divisor-a[j]%(divisor/10))/(divisor/10);//numOfDigits为相应的(divisor/10)位的值,如当divisor=10时,求的是个位数int num= b[numOfDigist][0];//用b中第一列的元素来储存每行中元素的个数b[numOfDigist][num]=a[j];}}void collectElments(int a[],int b[10][len 1]){int k=0;for(int i=0;i<10;i )for(int j=1;j<=b[i][0];j )a[k ]=b[i][j];}void zeroBucket(int b[][len 1]){for(int i=0;i<10;i )for(int j=0;j1;j )b[i][j]=0;}
四、合(归)并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
#includeusing namespace std;void merge(int *data, int start, int mid, int end, int *result){ int i, j, k; i = start; j = mid 1; //避免重复比较data[mid] k = 0; while (i <= mid
21ic电子网

扫描二维码,关注更多精彩内容

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

美国旧金山和中国苏州2026年2月8日 /美通社/ -- 信达生物制药集团(香港联交所股票代码:01801),一家致力于研发、生产和销售肿瘤、自身免疫、代谢、眼科等重大疾病领域创新药物的生物制药公司,宣布与礼来制药达成战...

关键字: COM 代码 创始人 控制

香港2026年2月4日 /美通社/ -- 华钦科技集团(纳斯达克代码:CLPS,以下简称"华钦科技"或"集团")今日宣布其董事会已通过一项集团股份回购计划的决议。该决议声明,当集团股价低于每股2美元时,集团可在公开市场上...

关键字: PS BSP 代码 纳斯达克

香港2025年12月11日 /美通社/ -- 诺亚控股有限公司(Noah Holdings Limited,以下简称"诺亚"或"公司",纽交所代码:NOAH,港交所代码:6686)...

关键字: AI 代码 AN 操作系统

弗吉尼亚州阿什本2025年12月10日 /美通社/ -- 企业技术与创新领域的领先合作伙伴DXC Technology(纽约证券交易所代码:DXC)今日宣布推出AdvisoryX,这是一支旨在帮助企业应对最复杂的战略、运...

关键字: ADVISOR AI TECHNOLOGY 代码

新加坡2025年12月8日 /美通社/ -- 近日,51Talk在线教育集团("51Talk"或"公司")(纽约证券交易所美国股票代码:COE)公布了其截至2025年9月...

关键字: BSP 代码 创始人 新加坡

北京2025年12月2日 /美通社/ -- 亚马逊云科技在2025 re:Invent全球大会上,宣布为Amazon Transform推出全新的Agent功能,以快速推进代码和应用现代化,助力客户更快消除技术债务,将更...

关键字: 亚马逊 代码 TRANSFORM AGENT

苏州2025年11月10日 /美通社/ -- 在11月8日举行的天准科技股份有限公司(股票代码:688003)成立二十周年峰会上,一项承载深远意义的公益计划——"美道基金"正式发布。香港科技大学校董会...

关键字: AI 人工智能 代码 智能化

模块化是一种将复杂系统分解为独立、可管理单元的软件开发方法。在前端开发中,模块化指的是将JavaScript代码、样式、模板等资源组织成独立的功能单元。

关键字: 模块化 代码

香港2025年10月10日 /美通社/ -- 华钦科技集团公司(纳斯达克代码:CLPS,以下简称"华钦科技")今日宣布将于下周五2025年10月17日开盘前发布2025财年下半年及全年财报。 华钦科技集团公司简介 华...

关键字: PS BSP 代码 COM

马耳他弗洛里亚纳2025年9月30日 /美通社/ -- ArriTech今日宣布推出新一代QGen Online软件平台,助力企业无需编码即可构建合规的客户入驻流程,并将AI驱动的KYC(了解你的客户)、KYB(了解你的...

关键字: GEN 代码 ITECH ARRI
关闭