排序分为
1.内部排序
2.外部排序
3.25更新,目前呢只是学习和使用这些方法,就是单纯的get工具。实质性的算法思维方式无从下手。
内部排序只要是利用内存进行排序
外部排序是因为所操作的数据较大需要外部存储进行操作
1.冒泡排序
很形象的形容,将最大的数字冒泡到最上层固定住。
主要实现过程就是for的嵌套
package com.Example.Sort;
/**
* @author Administrator
* @function : 冒泡算法
*/
public class MPtoSort {
public static int count=0;
public static void main(String[] args){
int[] inPut=MPtoSort.mp();
MPtoSort.outPut(inPut);
System.out.println("\n"+count);
}
public static int[] mp(){
int[] finalArray={3,1,5,2};
for(int j=0;j<finalArray.length;j++){
for(int i=0;i<finalArray.length-j-1;i++){
count++;
if(finalArray[i]>finalArray[i+1]){
int memory=0;
memory=finalArray[i+1];
finalArray[i+1]=finalArray[i];
finalArray[i]=memory;
}
}
}
return finalArray;
}
public static void outPut(int[] array){
for (int i : array) {
System.out.print(i);
}
}
}
2.快速排序
主要思想我认为是类似于二分法那种。什么分治法,我是没理解深入。
![]()
![]()
以下是自己的重新理解:
![]()
代码设计:
手足无措!!!最先想到的是迭代,因为快排中总存在中心值和左右区域的扫描。
然后就是左右区域的扫描。
慢慢的有些思路了,就像赶鸭子上架,将小的元素全部放在左边,大的元素放在右边。逆向思维想想看,有点像数学归纳法。(其实我也觉得我的思维比较怪)即保证【n-1
public void quick_sort(int []a,int left,int right){
//结束迭代
if(left > right){
return;
}
int i = left ;
int j = right;
int temp = a[left];//设置基准值,将最左端元素作为基准值
while(i != j){
//往左移位,直到大于temp
while(i<j && a[j]>=temp){
j--;
}
//往右移位,直到小于temp
while(i<j && a[i]<=temp){
i++;
}
if(i < j){
//交换彼此的数据
int tt = a[i];
a[i] = a[j];
a[j] = tt;
}
}
//交换基位数据
int kk = a[i];
a[i] = temp;
a[left] = kk;
//下一次迭代
quick_sort(a,left,i-1);//左半边
quick_sort(a,j+1,right);//右半边
}