排序算法
来源:互联网 发布:苹果5s怎么设置3g网络 编辑:程序博客网 时间:2024/05/17 21:49
排序算法有很多(参考http://www.programfan.com/club/showtxt.asp?id=202195有代码;http://www.cnblogs.com/kkun/archive/2011/11/23/2260312.html算法介绍举例;http://c.chinaitlab.com/special/cpxsf/index.html有代码)但我们不需要全部记住,冒泡法和快速排序法是较常提到的算法,下面仅介绍这两种。
1、冒泡法排序(bubble sort)
void Bubble_Sort(int A[],int n){ int t,flag; for(int i=0;i<n;i++) {//记录一次遍历中是否有元素的交换 flag=0; for(int j=i+1;j<n;j++) { //从小到大排列 if(A[j]<A[i]) { t=A[j]; A[j]=A[i]; A[i]=t; flag=1; } }//如果这次遍历没有元素的交换,那么排序结束 if(flag==0) break; }}
2、快速排序(不稳定的)
原理:快速排序采用了一种分治的策略,通常称其为分治法,其基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
快速排序的具体过程如下:
第一步,在待排序的n个记录中任取一个记录,以该记录的排序码为准,将所有记录分成两组,第1组各记录的排序码都小于等于该排序码,第2组各记录的排序码都大于该排序码,并把该记录排在这两组中间。
第二步,采用同样的方法,对左边的组和右边的组进行排序,直到所有记录都排到相应的位置为止。
//快速排序,low和high是数组的下标void Quick_Sort(int A[],int low,int high) { if(low<high) {//取序列中的第一个元素为枢纽元素 int temp,t=A[low]; int l=low,h=high; while(l<h) { //从前往后寻找,将小于枢纽元素的元素放在一个的数组中 while(A[l]<t) l++; //从后往前寻找,将大于枢纽元素的元素放在令一个的数组中 while(A[h]>=t) h--; //比枢纽元素大的放在后半部分,比枢纽元素小的放在前半部分 if(h>l) { temp=A[l]; A[l]=A[h]; A[h]=temp; } }//在分割后的两部分中又分别重复上述过程 Quick_Sort(A,low,l-1); Quick_Sort(A,l+1,high); }}