JAVA学习(排序)
一、选择排序 //时间复杂度O(n^2) 
- 在一个长度为 N 的无序数组中,第一次遍历 n-1 个数找到最小的和第一个数交换。
- 第二次从下一个数开始遍历 n-2 个数,找到最小的数和第二个数交换。
- 重复以上操作直到第 n-1 次遍历最小的数和第 n-1 个数交换,排序完成。
实现代码:
public static void sortSample(int []arr){
for(int i=0;i<arr.length-1;i++){
minIndex = i ;
for (int j =i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
minindex = j;
}
}
int temp =arr[minIndex];
arr[minIndex] = arr[i];
arr[i] = temp;
}
}
二、冒泡排序 //时间复杂度O(n^2)

- 比较相邻两个数据如果。第一个比第二个大,就交换两个数
- 对每一个相邻的数做同样1的工作,这样从开始一队到结尾一队在最后的数就是最大的数。
- 针对所有元素上面的操作,除了最后一个。
- 重复1~3步骤,知道顺序完成。
实现代码:
public static void bubbleSort(int []arr){
for(int i=0;i<arr.length;i++){
for (int j =0;j<arr.length-i-1;j++){ //arr.length-1:避免角标越界
//arr。length-i;外循环每增加一次,内循环比较次数-1
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
三、快速排序 //时间复杂度 O(nlogn)

- 从数列中挑出一个元素作为基准。
- 重新排列数列,把所有的比基准小的放在基准前面,反之放在后面(一样大可任意一边)完成后基准处在分区的中间位置。
- 通过递归调用把小于基准元素和大雨基准元素的子序列进行排序。
代码实现:
public static int getMid(int []arr,int left,int right){
int pivot = arr[left];
while(left<right){
while(arr[right]>pivot&&left<right){
right--;
}
arr[left]=arr[right];
while(arr[left]<pivot&&left<right){
left++;
}
arr[right]=arr[left];
}
arr[left]=pivot;
return left;
}
public static void quickSort(int []arr,int left,int right){ //快速排序入口
if(left<right){
int mid=getMid(arr,left,right); //获取中间值角标
quickSort(arr,left,mid-1);
quickSort(arr,mid+1,right);
}
}

浙公网安备 33010602011771号