快速排序:选择一个值为key 然后让begin和end开始扫描,此时如果end遇到小于key的数停下,直到begin遇到比key大的值,此时两边交换数值,继续前进 直到相遇,此时将key与相遇的值互换,key左边都比他小,右边都比它大,将key的左右序列分别进行同样的操作,直到左右序列只剩一个数据或者左右序列不存在,停止。
代码:
package com.jk.Sort; public class QuckSort1 { public static void main(String[] args) { int[] arr = new int[]{99, 97, 96, 95, 94, 92, 91, 90, 88, 78}; int begin=0; int end=arr.length-1; int left=begin; int right=end; int key=begin; for (int i=0;i<=arr.length-1;i++){ if(begin>end){ break; } if (arr[end]>=arr[key]&&begin<end) { end--; } if(arr[begin]<=arr[key]&&begin<end){ begin++; } int a=arr[begin]; arr[begin]=arr[end]; arr[end]=a; // if(begin==end){ // int b=arr[end]; // arr[end]=arr[key]; // arr[key]=b; // // } key=end; } for (int x=0;x<=9;x++){ System.out.println(arr[x]); } } }
冒泡排序:从第一个值开始与后面的值比较,比他小的就互换位置,遇到比他大的,选比他大的继续继续比较,直到最大的值在最右边
代码:
package com.jk.Sort; //冒泡排序 public class Maopao { public static void main(String[] args) { int[] arr=new int[]{99,97,96,95,94,92,91,90,88,78}; int k; for (int i=0;i<9;i++){ for (int j=0;j<9-i;j++){ if(arr[j]>arr[j+1]){ k=arr[j]; arr[j]=arr[j+1]; arr[j+1]=k; } } } for (int x=0;x<=9;x++){ System.out.println(arr[x]); } } }
插入排序:开始选取一个item,我们假设第一个数据已经有序,此时选取第二个值,遇到item大的元素,该元素往后移一位,直到遇到比item小的,把item插入到该元素后面,如果已排序元素均小于item,将它放在第0位,
代码:
package com.jk.Sort; public class QuickSort { public static void main(String[] args) { int[] arr = new int[]{99, 97, 96, 95, 94, 92, 91, 90, 88, 78}; for (int i = 0; i < arr.length - 1; i++) { int end = i; int tem = arr[end + 1]; while (end >= 0) { if (tem < arr[end]) { arr[end + 1] = arr[end]; end--; } else { break; } } arr[end + 1] = tem; } for (int x = 0; x <= 9; x++) { System.out.println(arr[x]); } } } //插入排序 有序区 开始只有一个end=0; 后面for循环累加 有序区越来越大 从后往前扫描遇到比tem大的,比他大的就往后移,比他小的就退出循环, // 把tem加在比他小的后面如果没有比tem小的 ,tem放在第一位 因为此时end=-1;所以end+1=0;