目录
1、冒泡排序
简介:
(1)循环遍历数组,判断相邻两个元素大小如果满足条件list[x]>list[x+1],则将两个元素位置对换。
(2)重复步骤(1),判断初始元素向右依次递减
(3)一般有两层循环,外循环循环次数为数组length,内循环次数依次递减
(4)时间复杂度为O(n)~O(n^2)
实现案例:
public void bubbleSort(int arr[]){ for (int j=0;j<arr.length;j++){ // 第一轮循环 for(int i=0;i<arr.length-1-j;i++){// 内循环随着j值变化递减 if (arr[i]>arr[i+1]){ // 判断相邻的两个元素,如果前一个元素大于后一个元素,则两个元素交换值 arr[i]=arr[i]+arr[i+1]; arr[i+1]=arr[i]-arr[i+1]; arr[i]=arr[i]-arr[i+1]; } } } }
2、快速排序
简介:
(1)将对象数组第一个元素值作为基数值,
定义一个left指针从左遍历数组判断元素是否大于基数,若大于将元素移至右边,若小于反之;
定义一个right指针从右边遍历数组判断元素是否小于基数,若小于将元素移至右边,若大于反之;
(2)将数据左右两边的组数作为新的数组对象递归调用执行(1)步骤,直到left指针和right指针指向同一元素。
(3)时间复杂度为O(nlogn)~O(n^2)
实现案例:
public void quickSort(int[] array,int left,int right){ if(left<right){ int int1=left; int int2=right; //取最左边的元素为基数 int pivot=array[int1]; while (left<right){ //大于基数的元素放右边,小于基数的元素放左边 while (left<right&& array[right]>=pivot){ right--; } array[left]=array[right]; while (left<right&&array[left]<=pivot){ left++; } array[right]=array[left]; } array[left]=pivot; quickSort(array,int1,left-1); //取右边的子数组作为参数递归调用 quickSort(array,left+1,int2); //取左边的子数组作为参数递归调用 } else return; }
3、简单排序
简介:
(1)分内外两层循环,核心思维是每轮循环获得一个最大元素,并置于序列前端;
(2)平均时间复杂度O(n^2);
实现案例:
public void simpleSort(int[] arr){ for (int i=0;i<arr.length;i++){ for (int j=i;j<arr.length;j++){ if (arr[i]<arr[j]){ //将最大元素置于集合前端 int temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } } }