1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
class Solution{

public void guibing(int[] array,int low,int high){
if(low < high){
int mid = (high + low)/2;
guibing(array,low,mid);
guidbing(array,mid+1,high);
merge(array,low,mid,high);

}


}
// 时间复杂度 nO(logN)
public void merge(int[] array,int left,int mid,int right){
int n1 = mid - left +1;
int n2 = right - mid;
int[] array1 = new int[n1];
int[] array1 = new int[n2];
for(int i=0;i< n1;i++){
//
array1[i] = array[left+i];
}
for(int j=0;j<n2;j++){
//
array2[j] = array[mid+1+j];
}
int i=0;
int j=0;
//
int k=left;
while(i < n1 && j < n2){
if(array1[i] <= array2[j]){
// 注意点
array[k] = array1[i];
i++;

}else{
array[k] = array2[j];
j++;

}
k++;
}

while(i < n1){
array[k]= array1[i];
i++;
k++
}

while(j < n2){
//
array[k] = array2[j];
j++;
k++;
}


}

}

快速排序

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

class Solution{


public void quickSort(int[] array,int low,int higth){
if(low < hight){
int partition = getPartition(array,low,higth);
quickSort(array,low,partition);
quickSort(array,partition+1,hight);
}


}

public int getPartition(int[] array,int low,int higth){
int pivot = array[higth];
int i = low -1;
for(int j=low;j< higth;j++){
if(array[j] <pivot){
i++;
swap(array,i,j);
}
}
swap(array,i+1,higth);
return i;
}

public void swap(int[] array,int left,int right){
int temp = array[left];
array[left]= array[right];
array[right]= temp;
}
}

__END__