1.冒泡排序:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
/** * 冒泡排序 * @param 排序前数组a */ public void BubbleSort(int [] a) { int n=a.length; //获取数组a的长度 for(int i=0;i<n-1;i++) //外循环控制哪个作为比较者 { for(int j=i+1;j<n;j++) //内循环控制哪些是被比较者 { if(a[i]>a[j]) //以升序的方式交换两个比较值 { int temp=a[i]; a[i]=a[j]; a[j]=temp; } } } }
2.快速排序
先从数列中取出一个数作为基准数,记为x。
分区过程,将不小于x的数全放到它的右边,不大于x的数全放到它的左边。(这样key的位置左边的没有大于key的,右边的没有小于key的,只需对左右区间排序即可)
再对左右区间重复第二步,直到各区间只有一个数
/**
*
* @param 排序前数组a
* @param 待排序数组左边界left
* @param 待排序数组右边界right
*/
public void QuickSort(int [] a,int left,int right)
{
int i=left,j=right,key=a[left],temp=0;
while(i<j)
{
while(i<j&&a[j]>key)j--; //j从后向前遍历,找到一个比key小的值,交换,则j指向key值所在的位置
if(i<j) //当j--执行完毕之后,i正好等于j的时候不需要进行额外的交换代码执行
{
temp=a[j];
a[j]=a[i];
a[i]=temp;
i++;
}
while(i<j&&a[i]<key)i++; //i从前向后遍历,找到一个比key大的值,交换,则i指向key值所在得位置
if(i<j) //当i++执行完毕之后,i正好等于j的时候不需要进行额外的交换代码执行
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
j--;
}
} //left,i,right的条件判断是为了当分组只剩下一个元素的时候就无须继续递归了
if(left<i)QuickSort(a,left,i-1); //跳出循环之后i和j相等
if(i<right)QuickSort(a,i+1,right); //进行递归
}