最近在实验室恰逢师兄师姐们的校招季,会有很多面试笔试题考一些基本的算法,其中较为常用的就是排序算法,当然这里指的仅仅是内部排序,处于复习的目的,回顾了一下在大二时候学习的一些排序方法,算是一个记录
内部排序大概来说有10种,分别是,选择排序,冒泡排序,插入排序,归并排序,冒泡排序,基数排序,堆排序,桶排序,计数排序,布尔排序,今天主要说一说最常用的前面五种算法,也是面试或者笔试中较为常用的
话不多少,代码奉上,基本的说明都在注释里面交代了
/* Author:luchi Date:2015/10/22 */ #include<iostream> using namespace std; void printResult(int* a,int n,char* type){ cout<<type<<": "; for(int i=0;i<n;i++){ cout<<a[i]<<" "; } cout<<endl; } /*Choose sorting 直接排序比较简单,扫描N-1趟,每趟选取一个最小的 */ void ChooseSorting(int *a ,int n) { for(int i=0;i<n-1;i++){ for(int j=i+1;j<n;j++){ if(a[j]<a[i]){ int temp=a[i]; a[i]=a[j]; a[j]=temp; } } } } /*BubbleSort 冒泡排序是交换排序N-1趟,每一趟把最大的转到最后面 */ void BubbleSort(int*a,int n) { for(int i=1;i<=n-1;i++) { for(int j=0;j<=n-i-1;j++){ if(a[j]>a[j+1]){ int temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } } /* InsertionSort */ void InsertionSort(int* a,int n){ for(int i=1;i<n;i++){ int cur=a[i]; int j; for(j=i-1;j>=0;j--){ if(a[j]>cur) { a[j+1]=a[j]; }else break; } a[j+1]=cur; } printResult(a,10,"InsertionSort"); } /*MergeSort 递归排序,讲一个数组分成两个部分,对这两个部分的数据进行排序,然后将两部分的 (此时已经是有序的)进行Merge操作,也就是重新合并成一个有序的数组 T(n)=2T(n/2)+O(n) 递推可以知道时间复杂是Lg(n)*n */ void Merge(int * a,int begin,int mid,int end){ int *b=new int[end-begin+1]; int left_begin=begin; int left_end=mid; int right_begin=mid+1; int right_end=end; int pos=0; while(left_begin<=left_end && right_begin<=right_end){ if(a[left_begin]<a[right_begin]){ b[pos++]=a[left_begin]; left_begin++; }else{ b[pos++]=a[right_begin]; right_begin++; } } if(left_begin>left_end){ for(int i=right_begin;i<=right_end;i++){ b[pos++]=a[i]; } }else{ for(int i=left_begin;i<=left_end;i++){ b[pos++]=a[i]; } } for(int i=begin;i<=end;i++){ a[i]=b[i-begin]; } } void MergeSort(int * a,int begin,int end){ if(begin==end)return; int mid=(begin+end)/2; MergeSort(a,0,mid); MergeSort(a,mid+1,end); Merge(a,begin,mid,end); } /*quick_sort 快速排序属于较为重要的排序 基本思想就是对于一个数字,首先以第一个元素组为基准, 比他小的放在左边,比他大的放在右边 然后分别对左右两边再进行以上操作即可 */ void quickSort(int*a,int begin,int end){ if(begin>=end)return; int seperator=a[begin]; int count=0; for(int i=begin+1;i<=end;i++){ if(a[i]<seperator){ int temp=a[count+begin+1]; a[count+begin+1]=a[i]; a[i]=temp; count++; } } int temp=a[begin]; a[begin]=a[begin+count]; a[begin+count]=temp; quickSort(a,begin,begin+count-1); quickSort(a,begin+count+1,end); } int main(){ int a[]={10,2,11,102,34,29,123,76,2,-7}; // ChooseSorting(a,10); // BubbleSort(a,10); // InsertionSort(a,10); // MergeSort(a,0,9); quickSort(a,0,9); printResult(a,10,"QuickSort"); return 0; }
今晚已经有点晚了,后面五种排序过些日子再弄出来
相关推荐
1、本演示程序对以下6种常用的内部排序算法进行实测比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。 2、待排序表的表的元素的关键字为整数,表长不小于100;其中的数据要用伪随机数产生...
利用python,JavaScript,java,go,PHP等实现: 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序
本演示程序对以下6种常用的内部排序算法进行实测比较:起泡排序,直接插入排序,简单选择排序,快速排序,希尔排序,堆排序。
数据结构课程设计(内部排序算法比较_C语言) 数据结构课程设计(内部排序算法比较_C语言)
各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。 二.基本要求 (1)对以下10种常用的内部排序...
实验7: 内部排序算法比较.doc 实验7: 内部排序算法比较.doc 实验7: 内部排序算法比较.doc
通过随机数据比较各内部排序算法的关键字比较次数和关键字移动的次数,以取得直观感受。待排序表的表长不小于100;至少要用5组不同的输入数据作比较;排序算法不少于5种; 待排序的元素的关键字为整数; 比较的指标...
介绍了一种c语言中常用的排序方法,内部排序.
设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。
输入的数据形式为任何一个正整数,大小不限。 输出的形式:数字大小逐个递增的数列。 功能要求:给出多组不同元素个数的输入数据(可考虑用随机函数生成整数,而不用人工输入), 并用列表打印出每种排序下的各趟排序...
数据结构课设中的内部排序算法的完整实验报告和可运行源代码 绝对可用 绝对原创 题目: 一.题目:内部排序算法研究 (1)设n个关键字均为整数(1≤n≤100000) (2)设计K个内部排序算法(K≥5), 每个算法记录执行所...
几种内部排序算法总结!(冒泡排序、快速排序、直接插入排序、拆半插入排序、简单选择排序)
对以下六种常用的内部排序算法进行比较:希尔排序、直接选择排序、快速排序、直接插入排序、堆排序、冒泡排序。
设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 [需求分析] (1)对起泡排序、直接排序、简单选择排序、快速排序、希尔排序、堆排序算法进行比较; (2)待排序表的表长不小于100...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。 【基本要求】 (1)实现各种内部排序。包括冒泡排序,直接选择排序,希尔排序,快速排序,堆排序。 (2) 待排序的元素的关键字为整数...
NULL 博文链接:https://hxraid.iteye.com/blog/646760
选择排序,插入排序,希尔排序,堆排序,快速排序,冒泡排序,性能比较。 对于一个随机的数组,可以知道排序所需的比较次数和移动次数。用c++面向对象构建。
设计一个测试程序比较几种内部排序算法的关键字比较次数和移动次数以取得直观感受。
上海交通大学数据结构课程作业,内部排序算法比较代码。 题目:在教科书中,各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶或大概执行时间。试通过随机数据比较各算法的关键字比较次数和关键字移动...