目录
1、冒泡排序
2、快速排序
3、简单排序
1、冒泡排序
简介:
(1)循环遍历数组,判断相邻两个元素大小如果满足条件list[x]>list[x+1],则将两个元素位置对换。
(2)重复步骤(1),判断初始元素向右依次递减
(3)一般有两层循环,外循环循环次数为数组length,内循环次数依次递减
(4)时间复杂度为O(n)~O(n^2)
实现案例:
public void bubbleSort(int arr[]){
for (int j=0;j<arr.length;j++){ // 第一轮循环
for(int i=0;i<arr.length-1-j;i++){// 内循环随着j值变化递减
if (arr[i]>arr[i+1]){
// 判断相邻的两个元素,如果前一个元素大于后一个元素,则两个元素交换值
arr[i]=arr[i]+arr[i+1];
arr[i+1]=arr[i]-arr[i+1];
arr[i]=arr[i]-arr[i+1];
}
}
}
}
2、快速排序
简介:
(1)将对象数组第一个元素值作为基数值,
定义一个left指针从左遍历数组判断元素是否大于基数,若大于将元素移至右边,若小于反之;
定义一个right指针从右边遍历数组判断元素是否小于基数,若小于将元素移至右边,若大于反之;
(2)将数据左右两边的组数作为新的数组对象递归调用执行(1)步骤,直到left指针和right指针指向同一元素。
(3)时间复杂度为O(nlogn)~O(n^2)
实现案例:
public void quickSort(int[] array,int left,int right){
if(left<right){
int int1=left;
int int2=right; //取最左边的元素为基数
int pivot=array[int1];
while (left<right){ //大于基数的元素放右边,小于基数的元素放左边
while (left<right&& array[right]>=pivot){
right--;
}
array[left]=array[right];
while (left<right&&array[left]<=pivot){
left++;
}
array[right]=array[left];
}
array[left]=pivot;
quickSort(array,int1,left-1); //取右边的子数组作为参数递归调用
quickSort(array,left+1,int2); //取左边的子数组作为参数递归调用
}
else return;
}
3、简单排序
简介:
(1)分内外两层循环,核心思维是每轮循环获得一个最大元素,并置于序列前端;
(2)平均时间复杂度O(n^2);
实现案例:
public void simpleSort(int[] arr){
for (int i=0;i<arr.length;i++){
for (int j=i;j<arr.length;j++){
if (arr[i]<arr[j]){ //将最大元素置于集合前端
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
}