您的位置:首页 > 其它

交换排序(冒泡排序,快速排序)

2017-09-24 13:30 176 查看
交换排序:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动

冒泡排序算法的运作如下:(从后往前)

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。



快速排序(Quicksort)是对冒泡排序的一种改进。

快速排序的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列





public class ExcahngeSort {

static int[] array = {58,49,2,95,111,30,5,46,7,11,1,66,77,42,86,66,2};

public static void main(String[] args) {
// TODO Auto-generated method stub
PrintArray(array);
//bubbleSort();
quickSort();
}

private static void quickSort() {
// TODO Auto-generated method stub
int left = 0;
int right = array.length-1;
sort(left,right);
PrintArray(array);

}

private static void sort(int left, int right) {
// TODO Auto-generated method stub
int i=left,j=right;
if(i<j){
int mark = array[left];
while(i<=j){
while(array[i]<mark && i<right) i++;
while(array[j]>mark && j>left ) j--;

if(i<=j){
int temp = array[i];
array[i]=array[j];
array[j]=temp;
i++;
j--;
// PrintArray(array);
}
}
if(j>left) sort(left,j);
if(i<right)sort(i,right);
}
}

private static void bubbleSort() {
// TODO Auto-generated method stub
for(int i=array.length-1;i>=0;i--) //从后往前
{
for(int j=0;j<i;j++) //从第一个数开始两两比较
{
// System.out.println("the value of j is"+j);
if(array[j+1]<array[j]){
int temp = array[j+1];
array[j+1]=array[j];
array[j]=temp;
}
}
}
PrintArray(array);

}

private static void PrintArray(int[] array2) {
// TODO Auto-generated method stub
for (int i =0; i< array.length;i++)
{
System.out.print(array[i]+" ");
}
System.out.println("");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: