归并排序
归并排序:
定义一个新的数组,将原来的数组一分为二,将原来数组的前一段第一个元素和后一段第一个元素比较
如果前一个哪个元素小,就把那个元素放在新数组里面,然后紧接着较大的元素和另一半的下一个元素
继续比较,再选出一个小的放在新数组里面。但是前提是原来这个数组的两半是排好顺序的。
public class MyTest {
public static void main(String[] args) {
int[] arr={12,23,45,45,2,46,255,25,231,1564,13}; //
System.out.println(Arrays.toString(a(arr)));
}
//构造一个方法,在里面创建一个新的数组。
public static int[] sort(int[] arr){
int[] newarr=new int[arr.length];
b(arr,0,arr.length-1,newarr);
return newarr;
}
/*
将一个数组分成两半,前后两半都要是排好顺序的,就使用递归,让它的前一半排好顺序
再让后一半排好顺序。
步骤,先将数组一分为二,那么前一半的最后一个元素是原来数组的中间元素,后一半的第一个
元素是原来数组的中间加一个元素,之后在将里面这些元素排好序就行。
*/
public static void b(int[] arr,int start,int end,int[] newarr){
if(start<end){
int mid=(start+end)/2;
b(arr,start,mid,newarr);
b(arr,mid+1,end,newarr);
c(arr,start,mid,end,newarr);
}
}
/*
构造一个方法:进行对数组的排序。
排序方法:将原来的数组一分为二,将原来数组的前一段第一个元素和后一段第一个元素比较
如果哪个元素小,就把那个元素放在新数组里面,然后紧接着较大的元素和另一半的
下一个元素继续比较,再选出一个小的放在新数组里面。但是前提是原来这个数组的两半是排好顺序的。
*/
public static void c(int[] arr,int start,int mid,int end,int[] newarr){
int left=start;
int right=mid+1;
int i=0;
while(left<=mid&&right<=end){
if(arr[left]<arr[right]){
newarr[i]=arr[left];
i++;
left++;
}else{
newarr[i]=arr[right];
i++;
right++;
}
}
while(left<=mid){
newarr[i]=arr[left];
i++;
left++;
}
while(right<=end){
newarr[i]=arr[right];
i++;
right++;
}
//最后要将排好序的数组放到原来的数组里面,不然原来的数组不变化,排序也不变化
int j=0;
for (int f=start;f<=end;f++){
arr[f]=newarr[j++];
}
}
}
冒泡排序
冒泡排序:
将一个数组的元素的第一个元素后面元素比,如果比第二个元素大,就把第二个元素
和第一个元素交换位置,然后再将此时的第二个元素和第三个元素比,如果大,就交
换位置,如果小,就让第三个元素和第四个元素比较,依次比较,最大的元素肯定就
在最后面,然后下一轮继续这样比较,将剩下元素最大的放在长度减一的位置,依次
类推就排好了。
public class MaoPao {
public static void main(String[] args) {
int[] arr={12,23,45,45,2,46,255,25,231,1564,13};
System.out.println(Arrays.toString(a(arr)));
}
public static int[] sort(int[] arr){
for(int i=0;i<arr.length;i++){
for(int j=0;j<arr.length-i-1;j++){
if(arr[j]>=arr[j+1]){
int a=arr[j];
arr[j]=arr[j+1];
arr[j+1]=a;
}
}
}
return arr;
}
}
选择排序
选择排序:
把第一个元素和后面的元素进行比较,如果比后面的大,就交换位置,如果比后面的小,
就不交换位置,一轮之后,最小就在第一个,接下来第二轮就开始是第二个元素和其他
的比较,依次类推,就排好了。
public class XuanZe {
public static void main(String[] args) {
int[] arr={12,23,45,45,2,46,255,25,231,1564,13};
System.out.println(Arrays.toString(sort(arr)));
}
public static int[] sort(int[] arr){
for(int i=0;i<arr.length;i++){
for(int j=i;j<arr.length;j++){
if(arr[i]>arr[j]){
int a=arr[j];
arr[j]=arr[i];
arr[i]=a;
}
}
}
return arr;
}
}
插入排序
插入排序:
从第一个开始,先将前面的数组排好顺序,然后将下一个和前面已经排好顺序的元素比较,
如果小于那个元素就插入进去。依次类推,就排好了。
public class ChaRu {
public static void main(String[] args) {
int[] arr={12,23,45,45,2,46,255,25,231,1564,13};
System.out.println(Arrays.toString(sort(arr)));
}
public static int[] sort(int[] arr){
for (int i=0;i<arr.length;i++){
for(int j=i;j>0;j--){
if(arr[j]<arr[j-1]){
int a=arr[j];
arr[j]=arr[j-1];
arr[j-1]=a;
}
}
}
return arr;
}
}