排序算法
- 0,生成随机数组
- 1,冒泡排序
- 2,选择排序
- 3,插入排序
- 4,快速排序
0,生成随机数组
利用Random工具类的nextInt()方法生成随机整数。
nextInt()的范围是[0,1),nextInt(100)的范围是[0,100),
//随机数组的生成
private static int[] random(int size){
int[] arr = new int[size];
for (int i = 0; i < arr.length; i++) {//遍历数组,生成随机整数
arr[i] = new Random().nextInt(100);
}
return arr;
}
1,冒泡排序
升序排序。
冒泡排序的原理(以递增序为例)是每次从头开始依次比较相邻的两个元素,如果后面一个元素比前一个要大,说明顺序不对,则将它们交换,本次循环完毕之后再次从头开始扫描,直到某次扫描中没有元素交换,说明每个元素都不比它后面的元素大,至此排序完成。
//1,冒泡排序
private static void method(int[] arr) {
for (int i = 0; i < arr.length-1; i++) {
for (int j = 0; j < arr.length-1-i; j++) {
if (arr[j] > arr[j+1]){//大的往后排
int x = arr[j];
arr[j] = arr[j+1];
arr[j+1] = x;
}
}
}
}
2,选择排序
升序排序。
在未排序序列中找到最小元素,存放到排序序列的起始位置.再从剩余未排序元素中继续寻找最小元素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕
//2,选择排序
private static void method2(int[] arr){
for (int i = 0; i < arr.length-1; i++) {
int k = i;
for (int j = i+1; j < arr.length; j++) {
if (arr[j] < arr[k]) {
k = j;
}
}
int x = arr[i];
arr[i] = arr[k];
arr[k] = x;
}
}
3,插入排序
升序排序。
从第一个元素开始,该元素可以认为已经被排序。取出下一个元素,在已经排序的元素序列中从后向前扫描如果该元素(已排序)大于新元素,将该元素移到下一位置 。重复上一步骤,直到找到已排序的元素小于或者等于新元素的位置。将新元素插入到该位置中。继续循环,直到最后一个数插入到有序序列。
//3,插入排序
private static void method3(int[] arr){
for (int i = 1; i < arr.length; i++) {
int j = i;
int temp = arr[i];
while (j > 0 && arr[j-1] > temp){
arr[j] = arr[j-1];
j--;
}
arr[j] = temp;
}
}
4,快速排序
从数列中挑出一个元素,称为“基准”,重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分割之后,该基准是它的最后位置。这个称为分割(partition)操作。递归地把小于基准值元素的子数列和大于基准值元素的子数列排序。
/**
* 4快速排序算法
* @param arr:目标数组
* @param i:目标数组的排序的开始位置
* @param j:目标数组的排序的结束位置
*/
public static void method4(int[] arr,int i,int j){
if (i>=j){//判断需要排序在个数是否大于1
return;
}
int index = arr[i];//定义第一个为标准
int start = i;//保存起始位置
int end = j;//保存结束位置
while (i != j){//总体循环
while (i != j){//寻找arr[j]小于index循环
if (arr[j] < index){//当找到小于index的arr[j]时,把他填入arr[i],i右移,跳出循环,arr[j]空出来,继续判断i
arr[i] = arr[j];
i++;
break;
}
j--;
}
while (i != j){//寻找arr[i]大于index循环
if (arr[i] > index){//当找到大于index的arr[i]时,把他填入arr[j],j左移,跳出循环,arr[i]空出来,继续判断j
arr[j] = arr[i];
j--;
break;
}
i++;
}
}//直到找到i==j时,arr[i] ==arr[j] 空出来,
arr[i] = index;
method4(arr,start,i-1);
method4(arr,i+1,end);
}