排序

来源:互联网 发布:mac卸载cuda 编辑:程序博客网 时间:2024/06/16 11:38

1.排序定义

排序是将一群数据,依指定的顺序进行排列的过程

2.排序的分类

(1)内部排序

指将需要处理的所有数据都加载到内部存储器中进行排序,包括(交换式排序法、选择式排序法和插入式排序法)

交换式排序法:

交换式排序属于内部排序方法,是运用数据值比较后,依判断规则对数据位置进行交换,以达到排序的目的

交换式排序法分为两种:冒泡排序法和快速排序法

冒泡排序法:

从小到大排序 首先确定外层循环次数

其次进行内部循环

public int[] sortMaopao(int[] arr){int temp =0;//外层循环for(int i=0;i<arr.length-1;i++){//内存循环for(int j= 0;j<arr.length-1-i;j++){if(arr[j]>arr[j+1]){temp = arr[j];arr[j]= arr[j+1];arr[j+1] = temp;}}}return arr;}

选择是排序法:

选择式排序也是一种简单的排序方法:

每一趟从待排序中选择最小的(或者最大的)元素,顺序放在已经排好序的数列的最后,直到全部待排序的数据元素排完。



public void selectSort(int[] arr){for(int i =0;i<arr.length-1;i++){int min = arr[i];int minIndex =i;int temp =0;for(int k=i+1;k<arr.length;k++){if(min>arr[k]){  min = arr[k];  minIndex =k;}}if(i!= minIndex){temp =  arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}}}



两种排序算法时间的比较:

package duotai;import java.util.Random;/* * 功能:演示各种排序算法 */public class Test7 {public static void main(String[] args) {// TODO Auto-generated method stub    int arr[] =new int[2000];    Test7.init(arr);        Buff buff =new Buff();    long start1 = System.currentTimeMillis();    buff.sortMaopao(arr);    long end1 = System.currentTimeMillis();    System.out.println("冒泡排序的时间:"+(end1-start1));    Select s= new Select();    long start2 = System.currentTimeMillis();    s.selectSort(arr);    long end2 = System.currentTimeMillis();    System.out.println("选择排序的时间:"+(end2-start2));}       public static  void init(int[] a){  Random r = new Random();  for(int i =0;i<2000;i++){  a[i]=r.nextInt(2000);  }}}class Buff{public void test(int a){++a;}//从小到大排序public int[] sortMaopao(int[] arr){int temp =0;//外层循环for(int i=0;i<arr.length-1;i++){//内存循环for(int j= 0;j<arr.length-1-i;j++){if(arr[j]>arr[j+1]){temp = arr[j];arr[j]= arr[j+1];arr[j+1] = temp;}}}return arr;}}class Select{//选择排序by  ctt 从小到大的排列顺序public void selectSort(int[] arr){for(int i =0;i<arr.length-1;i++){int min = arr[i];int minIndex =i;int temp =0;for(int k=i+1;k<arr.length;k++){if(min>arr[k]){  min = arr[k];  minIndex =k;}}if(i!= minIndex){temp =  arr[i];arr[i] = arr[minIndex];arr[minIndex] = temp;}}}//选择排序public void sort(int arr[]){//我任务第一个数就是最小的int temp = 0;for(int j=0;j<arr.length-1;j++){int min = arr[j];//记录最小数的下标int minIndex =j;for(int k=j+1;k<arr.length;k++){if(min>arr[k]){min =arr[k];minIndex =k;}}//当退出for循环,则找到这次的最小值temp = arr[j];arr[j] = arr[minIndex];arr[minIndex] = temp;}}}

入式排序法:

插入式排序法的思想:

把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依此与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

(2)外部排序

数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。包括(合并排序法和直接合并排序法)。


0 0
原创粉丝点击