public class Oder {
//交换array[a],array[b]的值
private void swap(int[] array,int a,int b){
System.out.println("swap"+ a+","+b);
if(a != b){
array[a] = array[a] + array[b];
array[b] = array[a] - array[b];
array[a] = array[a] - array[b];
}
printA(array);
}
private void printA(int[] array){
for(int i = 0 ; i < array.length ; i++){
System.out.print(array[i]+" ");
}
System.out.println();
}
//冒泡排序
public void bubbleSort(int[] arr){
for(int i = 0 ; i < arr.length ; i++){
for(int j = 1 ; j < arr.length - i ; j++){
if(arr[j - 1] > arr[j]){
swap(arr,j,j-1);
}
}
}
}
//插入排序
public void insectionSort(int[] arr){
for(int i = 0 ; i < arr.length ; i++){
for(int j = i ; j > 0 ; j--){
if(arr[j] > arr[j-1]){
swap(arr,j,j-1);
}
}
}
}
//选择排序
public void selectionSort(int[] arr){
int min = 0;
for(int i = 0 ; i < arr.length - 1; i++){
min = i;
for(int j = i + 1 ; j < arr.length ; j++){
if(arr[min] > arr[j]){
min = j;
}
}
swap(arr, i , min);
}
}
//快速排序
public void quickSort(int[] arr, int l , int r){
if( l < r ){
int compValue = l;
int rightPlace = partitions( arr , l , r , compValue);
quickSort(arr , l , rightPlace - 1);
quickSort(arr , rightPlace + 1 , r);
}
}
public int partitions(int[] arr, int l , int r , int m){
int n = l;
int compValue = arr[m];
swap(arr , m , r);
for(int i = l ; i < r ; i++ ){
if(arr[i] < compValue ){
swap( arr , n , i);
n++;
}
}
swap( arr , n , r );
return n;
}
//归并排序
public List mergeSort(List l){
List llist = new ArrayList();
List rlist = new ArrayList();
if(l.size()<=1){
return l;
}else{
int middle = l.size()/2;
for(int i = 0 ; i < middle ; i++){
llist.add(l.get(i));
}
for(int i = middle ; i < l.size() ; i++ ){
rlist.add(l.get(i));
}
}
llist = mergeSort(llist);
rlist = mergeSort(rlist);
System.out.println(llist);
System.out.println(rlist);
List finalList = merge(llist,rlist);
System.out.println(finalList);
return finalList;
}
//让两个有序数组合并成依然有序的一个数组
private List merge(List l, List r){
List list = new ArrayList();
for(int i = 0 ; l.size() != 0 && r.size() != 0 ; i++){
if((Integer)l.get(0) > (Integer)r.get(0)){
list.add(r.get(0));
r.remove(0);
}else{
list.add(l.get(0));
l.remove(0);
}
}
if( l.size() == 0){
for(Iterator iter = r.iterator(); iter.hasNext();){
list.add(iter.next());
}
}else{
for(Iterator iter = l.iterator(); iter.hasNext();){
list.add(iter.next());
}
}
return list ;
}
//交换array[a],array[b]的值
private void swap(int[] array,int a,int b){
System.out.println("swap"+ a+","+b);
if(a != b){
array[a] = array[a] + array[b];
array[b] = array[a] - array[b];
array[a] = array[a] - array[b];
}
printA(array);
}
private void printA(int[] array){
for(int i = 0 ; i < array.length ; i++){
System.out.print(array[i]+" ");
}
System.out.println();
}
//冒泡排序
public void bubbleSort(int[] arr){
for(int i = 0 ; i < arr.length ; i++){
for(int j = 1 ; j < arr.length - i ; j++){
if(arr[j - 1] > arr[j]){
swap(arr,j,j-1);
}
}
}
}
//插入排序
public void insectionSort(int[] arr){
for(int i = 0 ; i < arr.length ; i++){
for(int j = i ; j > 0 ; j--){
if(arr[j] > arr[j-1]){
swap(arr,j,j-1);
}
}
}
}
//选择排序
public void selectionSort(int[] arr){
int min = 0;
for(int i = 0 ; i < arr.length - 1; i++){
min = i;
for(int j = i + 1 ; j < arr.length ; j++){
if(arr[min] > arr[j]){
min = j;
}
}
swap(arr, i , min);
}
}
//快速排序
public void quickSort(int[] arr, int l , int r){
if( l < r ){
int compValue = l;
int rightPlace = partitions( arr , l , r , compValue);
quickSort(arr , l , rightPlace - 1);
quickSort(arr , rightPlace + 1 , r);
}
}
public int partitions(int[] arr, int l , int r , int m){
int n = l;
int compValue = arr[m];
swap(arr , m , r);
for(int i = l ; i < r ; i++ ){
if(arr[i] < compValue ){
swap( arr , n , i);
n++;
}
}
swap( arr , n , r );
return n;
}
//归并排序
public List mergeSort(List l){
List llist = new ArrayList();
List rlist = new ArrayList();
if(l.size()<=1){
return l;
}else{
int middle = l.size()/2;
for(int i = 0 ; i < middle ; i++){
llist.add(l.get(i));
}
for(int i = middle ; i < l.size() ; i++ ){
rlist.add(l.get(i));
}
}
llist = mergeSort(llist);
rlist = mergeSort(rlist);
System.out.println(llist);
System.out.println(rlist);
List finalList = merge(llist,rlist);
System.out.println(finalList);
return finalList;
}
//让两个有序数组合并成依然有序的一个数组
private List merge(List l, List r){
List list = new ArrayList();
for(int i = 0 ; l.size() != 0 && r.size() != 0 ; i++){
if((Integer)l.get(0) > (Integer)r.get(0)){
list.add(r.get(0));
r.remove(0);
}else{
list.add(l.get(0));
l.remove(0);
}
}
if( l.size() == 0){
for(Iterator iter = r.iterator(); iter.hasNext();){
list.add(iter.next());
}
}else{
for(Iterator iter = l.iterator(); iter.hasNext();){
list.add(iter.next());
}
}
return list ;
}