插入排序(超时)
public static int [ ] sortArray ( int [ ] nums) {
if ( null == nums || nums. length <= 1 ) {
return nums;
}
for ( int i = 1 ; i < nums. length; i++ ) {
int ind = findInd ( nums, i - 1 , nums[ i] ) ;
int tmp = nums[ i] ;
move ( nums, ind, i - 1 ) ;
nums[ ind] = tmp;
}
return nums;
}
public static int findInd ( int [ ] nums, int right, int point) {
int left = 0 ;
while ( left <= right) {
int mid = left + ( ( right - left) / 1 ) ;
if ( nums[ mid] <= point) {
left++ ;
} else {
right-- ;
}
}
return left;
}
public static void move ( int [ ] nums, int left, int right) {
for ( int i = right; i >= left; i-- ) {
nums[ i + 1 ] = nums[ i] ;
}
}
快速排序
public int [ ] sortArray ( int [ ] nums) {
if ( null == nums || nums. length <= 1 ) {
return nums;
}
sort ( nums, 0 , nums. length - 1 ) ;
return nums;
}
private void sort ( int [ ] nums, int left, int right) {
if ( left < right) {
int partition = partition ( nums, left, right) ;
sort ( nums, left, partition - 1 ) ;
sort ( nums, partition + 1 , right) ;
}
}
private int partition ( int [ ] nums, int left, int right) {
int point = nums[ left] ;
while ( left < right) {
while ( left < right && point <= nums[ right] ) {
right-- ;
}
nums[ left] = nums[ right] ;
while ( left < right && nums[ left] <= point) {
left++ ;
}
nums[ right] = nums[ left] ;
}
nums[ left] = point;
return left;
}