冒泡排序
所谓冒泡排序,本质上是从后往前确定元素的过程.
void swap(int *p,int *q) { *p^=*q; *q^=*p; *p^=*q; } void popsort(int* p,int n) { for(int i=0;i<n-1;i++) { for(int j=0;j<n-1-i;j++) { if(p[j]>p[j+1]) { swap(&p[j],&p[j+1]); } } } }
该代码存在部分缺点,因为如果一轮比较下来已经有序的话就没有必要进行比较了,下面进行优化。
void swap(int *p,int *q) { *p^=*q; *q^=*p; *p^=*q; } void popsort(int* p,int n) { int flag; for(int i=0;i<n-1;i++) { flag=1; for(int j=0;j<n-1-i;j++) { if(p[j]>p[j+1]) { swap(&p[j],&p[j+1]); flag=0; } } if(flag==1) break; } }
这里面设置一个标志位flag,假设刚开始是有序的,也就是让flag=1,内重循环一趟之后发现有序说明整体是有序的,那么就没有必要进行比较了,直接break出来就好了。