int temp,t;
int j = right;
int i = left;
temp = arr[left];
while(ij) {
while(arr[j] = tempij)
j--;
while(arr[i] = tempij)
i++;
if(ij) {
t = arr[i];
arr[i] = arr[j];
arr[j] = t;
}
}
arr[left] = arr[i];
arr[i] = temp;
Quick_sort(arr,left, i - 1);
Quick_sort(arr, i + 1, right);
}
归并排序是建立在归并操作上的一种有效的排序算法,归并排序对序列的元素进行逐层折半分组 , 然后从最小分组开始比较排序 , 每两个小分组合并成一个大的分组,逐层进行,最终所有的元素都是有序的 。
public void Mergesort(int[] arr,int left,int right) {
if(right - left0) {
int[] arr_1 = new int[(right - left)/2 + 1];
int[] arr_2 = new int[(right - left + 1)/2];
int j = 0;
int k = 0;
for(int i = left;i = right;i++) {
if(i = (right + left)/2) {
arr_1[j++] = arr[i];
}else {
arr_2[k++] = arr[i];
}
}
Mergesort(arr_1,0,(right - left)/2);
Mergesort(arr_2,0,(right - left - 1)/2);
Merge(arr_1,arr_2,arr);
}
}
public void Merge(int[] arr_1,int[] arr_2,int[] arr) {
int i = 0;
int j = 0;
int k = 0;
int L1 = arr_1.length;
int L2 = arr_2.length;
while(iL1jL2) {
if(arr_1[i] = arr_2[j]) {
arr[k] = arr_1[i];
i++;
}else {
arr[k] = arr_2[j];
j++;
}
k++;
}
if(i == L1) {
for(int t = j;jL2;j++)
arr[k++] = arr_2[j];
}else {
for(int t = i;iL1;i++)
arr[k++] = arr_1[i];
}
}
归并排序这里我使用了left,right等变量,使其可以通用 , 并没有直接用数字表示那么明确 , 所以给出相关伪代码,便于理解 。
Mergesort(arr[0...n-1])
//输入:一个可排序数组arr[0...n-1]
//输出:非降序排列的数组arr[0...n-1]
if n1
copy arr[0...n/2-1] to arr_1[0...(n+1)/2-1]//确保arr_1中元素个数=arr_2中元素个数
//对于总个数为奇数时 , arr_1比arr_2中元素多一个;对于总个数为偶数时,没有影响
copy arr[n/2...n-1] to arr_2[0...n/2-1]
Mergesort(arr_1[0...(n+1)/2-1])
Mergesort(arr_2[0...n/2-1])
Merge(arr_1,arr_2,arr)
Merge(arr_1[0...p-1],arr_2[0...q-1],arr[0...p+q-1])
//输入:两个有序数组arr_1[0...p-1]和arr_2[0...q-1]
//输出:将arr_1与arr_2两数组合并到arr
int i-0;j-0;k-0
while i
p span="" do="" j
if arr_1[i] = arr_2[j]
arr[k] - arr_1[i]
i-i+1
else arr[k] - arr_2[j];j-j+1
k-k+1
if i=p
copy arr_2[j...q-1] to arr[k...p+q-1]
else copy arr_1[i...p-1] to arr[k...p+q-1]
package test_1;
import java.util.Scanner;
public class Test01 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] arr_1 = new int[10];
for(int i = 0 ; i10 ; i++)
arr_1[i] = sc.nextInt();
Sort demo_1 = new Sort();
//1~5一次只能运行一个,若多个同时运行,则只有第一个有效 , 后面几个是无效排序 。因为第一个运行的已经将带排序数组排好序 。
demo_1.Select_sort(arr_1);//-----------------------1
//demo_1.Bubble_sort(arr_1);//---------------------2
/* //---------------------3
demo_1.Quick_sort(arr_1, 0 , arr_1.length - 1);
System.out.print("经过快速排序后:");
for(int i = 0 ; i10 ; i++)
System.out.print( arr_1[i] +" ");
System.out.println("");
*/
//demo_1.Insert_sort(arr_1);//--------------------4
/* //--------------------5
demo_1.Mergesort(arr_1,0,arr_1.length - 1);
System.out.print("经过归并排序后:");
for(int i = 0 ; i10 ; i++)
推荐阅读
- 兼容sqlserver7,兼容模式怎么设置
- jquery插件调用方法,jQuery插件下载
- Linux的Ex命令,linux中exec
- 怎么样微信开直播带货,怎么样微信开直播带货卖货
- go语言内存泄露排查 go语言内存不断升高
- jquery卡片展现数据,jquery选项卡
- 电商运营如何谈快递,电商运营如何谈快递业务
- 剑术格斗游戏视频,剑术格斗教学视频
- php原生插入数据库 php数据库写入实例