排序
来源:互联网 发布: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