JAVA基础实例(三)--排序

时间:2024-12-29 14:34:14
冒泡排序
是一种简单的排序算法。它反复地走訪过要排序的数列,一次比較两个元素。假设他们的顺序错误就把他们交换过来。走訪数列的工作是反复地进行直到没有再须要交换,也就是说该数列已经排序完毕。

这个算法的名字由来是由于越小的元素会经由交换慢慢“浮”到数列的顶端。


public class BubbleSort{

     public static void main(String[] args){

         int score[] = {67, 69, 75, 87, 89, 90, 99, 100};

         for (int i = 0; i < score.length -1; i++){    //最多做n-1趟排序

             for(int j = 0 ;j < score.length - i - 1; j++){    //对当前无序区间score[0......length-i-1]进行排序(j的范围非常关键,这个范围是在逐步缩小的)

                 if(score[j] < score[j + 1]){    //把小的值交换到后面

                     int temp = score[j];

                     score[j] = score[j + 1];

                     score[j + 1] = temp;

                 }

             }            

             System.out.print("第" + (i + 1) + "次排序结果:");

             for(int a = 0; a < score.length; a++){

                 System.out.print(score[a] + "\t");

             }

             System.out.println("");

         }

             System.out.print("终于排序结果:");

             for(int a = 0; a < score.length; a++){

                 System.out.print(score[a] + "\t");

        }

     }
 }
高速排序
之所比較快,由于相比冒泡排序,每次交换是跳跃式的。每次排序的时候设置一个基准点。将小于等于基准点的数所有放到基准点的左边,将大于等于基准点的数所有放到基准点的右边。这样在每次交换的时候就不会像冒泡排序一样每次仅仅能在相邻的数之间进行交换,交换的距离就大的多了。

因此总的比較和交换次数就少了,速度自然就提高了。

当然在最坏的情况下,仍可能是相邻的两个数进行了交换。

void quicksort(int left,int right)

{

    int i,j,t,temp;

    if(left>right)

       return;

                                

    temp=a[left]; //temp中存的就是基准数

    i=left;

    j=right;

    while(i!=j)

    {

                   //顺序非常重要,要先从右边開始找

                   while(a[j]>=temp && i<j)

                            j--;

                   //再找右边的

                   while(a[i]<=temp && i<j)

                            i++;

                   //交换两个数在数组中的位置

                   if(i<j)

                   {

                            t=a[i];

                            a[i]=a[j];

                            a[j]=t;

                   }

    }

    //终于将基准数归位

    a[left]=a[i];

    a[i]=temp;

                             

    quicksort(left,i-1);//继续处理左边的,这里是一个递归的过程

    quicksort(i+1,right);//继续处理右边的 ,这里是一个递归的过程

}

插入排序
就是每一步都将一个待排数据按其大小插入到已经排序的数据中的适当位置,直到所有插入完成。

static void insertion_sort(int[] unsorted)
{ for (int i = 1; i < unsorted.Length; i++)
{ if (unsorted[i - 1] > unsorted[i])
{
                  int temp = unsorted[i];                   int j = i;                   while (j > 0 && unsorted[j - 1] > temp)
{
unsorted[j] = unsorted[j - 1];
j--;
}
unsorted[j] = temp;
}
}
}