【数据结构学习笔记】——排序
2016-01-28 11:22
696 查看
冒泡排序
思想
一列数据,从第一个开始检查,检查与下一个元素的大小,如果前者大于后者,则交换位置。一次排序可以使最大的元素位于最后的位置。代码
void bubble(int a[],int n){ //一次冒泡 for(int i=0;i<n-1;i++) if(a[i]>a[i+1]) swap(a[i],a[i+1]);//交换位置函数 }
上面代码无论原序列是否排序,都需要检查。时间复杂度总是 O(n^2)
void bubblesort (int a[],int n){ for(bool sorted=false;sorted=!sorted;n--) for(int i=0;i<n;i++){ if(a[i]>a[i+1]){ swap(a[i],a[i+1]); sorted=false; } } }
解释:
sorted=!sorted是将
sorted值反转。
=是赋值,
!是非。在c++中
!=是不等于判断符号。
所以,如果进行了交换,那么就将
sorted置于否,说明排序没有完成。如果已经有序,
sorted则变为真,在反转之后变为假,循环结束。排序完成。
直接插入排序
思想
一列序列,若只有一个元素,则肯定是有序的。我们从第二个开始看起,与前面的元素进行比较,放入它应该存在的位置,直到最后一个元素放入,排序完成。代码
void insertionsort (int a[],int n) { for (int i=1;i<n;i++) { int j,temp; temp=a[i]; for (j=i-1;j>=0&&temp<a[j];j--) { a[j+1]=a[j]; } a[j+1]=temp; } }
解释:将每一个准备新插入进来的元素赋给temp,与它前面元素开始比较,选择插入位置。
选择排序
思想
遍历所有元素,选出最大的放在最后的位置,则一次过后将元素个数缩小为n-1个。代码
void selectionsort(int a[],int n){ bool sorted=false; for(int size=n;!sorted&&(size>1);size--){ int pos=0; sorted=true; for(int i=1;i<size;i++) if(a[pos]<=a[i]) pos=i; //选出最大的 else sorted=false; swap(a[pos],a[size-1]); //将最大的放在数组最后一个 } }
快速排序
思想
在一列数组中,选取一个key值(本代码取第一个),经过一次排序之后将序列分为两部分,左侧部分都比key值小,右侧部分都比key值大(但各个部分中是无序的)。再进行0~key,key+1~n的排序。直到只剩下一个元素。代码
void quicksort(int a[],int low,int high){ if(low >= high) return; //判断排序已经结束 int key=a[low]; int i=low,j=high; while(i<j){ while(i<j&&a[j]>=key) --j; swap(a[i],a[j]); //a[i]=a[j] while(i<j&&a[i]<=key) ++i; swap(a[i],a[j]); //a[j]=a[i] //也可行 } quicksort(a,low,i-1); quicksort(a,i+1,high); }
生成随机数进行排序
int main() { srand ( time (NULL) ); int n; cout<<"请输入你想要的数组大小 " ; cin>>n; int a ; //输入你想要的数组大小 for ( int i = 0 ; i < n; i ++ ) a[i]=rand() %10000; //生成随机数组 cout<<"排序之前数组:"; for(int i=0;i<n;i++) cout<<a[i]<<"\t"; cout<<endl; quicksort(a, 0, sizeof(a) / sizeof(a[0]) - 1); cout<<"排序之后数组:"; for(int i=0;i<n;i++) cout<<a[i]<<"\t"; c 4000 out<<endl; return 0; }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 在命令行用 sort 进行排序
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- 文件遍历排序函数
- C#数据结构之顺序表(SeqList)实例详解
- C#选择排序法实例分析
- C#插入法排序算法实例分析
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(七):数据结构详解
- C#实现Datatable排序的方法
- Lua教程(二):C++和Lua相互传递数据示例
- 解析从源码分析常见的基于Array的数据结构动态扩容机制的详解
- SQLSERVER的排序问题结果不是想要的
- Windows Powershell排序和分组管道结果
- C#数据结构之队列(Quene)实例详解
- C#数据结构揭秘一
- C#通过IComparable实现ListT.sort()排序