两种交换类排序(冒泡排序,快速排序)
交换类排序算法代码实现
1.冒泡排序
-
线性表冒泡排序flag优化
void BubbleSort(int a[] ,int n){ //n-1次起泡 bool flag; for(int i=0;i<n-1;i++){ flag=false; for(int j=0;j<n-i-1;j++){ if(a[j]>a[j+1]){ //保证稳定性,等于不交换 flag = true; int t = a[j]; a[j] = a[j+1]; a[j+1] = t; } } //如果没有进行一次交换操作 if(flag == false) break; } }
-
链表冒泡排序(交换值)
void BubbleSortWithLinkedList(LinkList &L,int n){ bool flag; for(int i=0;i<n-1;i++){ flag = false; LNode *q,*r; int t; q=L->next;r=q->next; while(q!=NULL&&r!=NULL){ if(q->data>r->data){ flag = true; t = q->data; q->data = r->data; r->data = t; } r=r->next; q=q->next; } if(flag ==false) break; } }
2.快速排序
-
快排简单版选取第一个点为枢纽
void QuickSort(int a[],int l,int r){ if(l>=r) return; int x = a[l]; int i = l;int j = r; while(i<j){ while(i<j&&a[j]>=x) j--; a[i]=a[j]; while(i<j&&a[i]<=x) i++; a[j]=a[i]; } a[i]=x; QuickSort(a,l,i-1); QuickSort(a,i+1,r); }
-
快排加强版能选择任意点为枢纽
void QuickSortS(int a[],int l,int r){ if(l>=r) return ; int i=l-1;int j=r+1; int x = a[l+r>>1]; while(i<j){ do i++;while(a[i]<x); do j--;while(a[j]>x); if(i<j){ int t = a[j]; a[j] = a[i]; a[i] = t; } } QuickSort(a,l,j);QuickSort(a,j+1,r); }
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
机器学习R-计算大题-TYUT