排序
1,快速排序又称分治排序
主要是运用了指针和递归的思想,运行速度极快,节约内存
public class 快速排序2 {
public static void main(String[] args) {
int[] arr = {1, 3, 6, 8, 9, 4, 2};
kuaipai(arr, 0, arr.length - 1);
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");
}
}
public static void kuaipai(int[] arr, int left, int right) {//创建一个快拍的方法
if (left > right) {
return;//这种情况不能够存在
}
int base =arr [left];//定义最左边的为基准数
int i = left;//定义两个指针,i是左指针j是右指针
int j =right;
while (i != j) {//表示俩个指针还没有相遇
while (arr[j] >= base && i<j) {
j--;//从右边开始检索,如果比基准数大的话继续检索
}
//跳出上面的循环说明检索到了比基准数小的数此时右指针停下
while (arr[i] <= base && i<j) {
i++;//这里和上面同理,就是左指针检索比基准数大的数之后会停下
}
//这里表示左指针检索到了比基准数大的数
//这里把左右指针对应的元素进行换位,需要在引入一个变量充当中间量
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;//这样左右指针的元素就完成了交换,之后继续检索,直到跳出最大的循环
}
//表示此时两个指针相遇了,i=j
//此时把基准数和指针对应的元素进行交换
arr[left] = arr[i];
arr[i] = base;//这里不用在引入变量。因为基准数和left是一样d
//此时第一轮检索结束,还要对基准数两边进行检索,因为方法是可以调用的,所以我们在方法里面再次调用这个方法,自己调用自己又称 递归
kuaipai(arr, left, i - 1);//对基准数左边的进行排序
kuaipai(arr, j + 1, right);
}
2,冒泡排序
每次冒泡过程都是从数列的第一个元素开始,然后依次和剩余的元素进行比较, 跟列队一样, 从左到右两两相邻的元素比大小, 高的就和低的换一下位置. 最后最高(值最大)的肯定就排到后面了.
public class 冒泡排序 {
public static void main(String[] args) {
int []arr={9,4,7,3,8,1};
maopao(arr);
for (int i=0;i<arr.length;i++){
System.out.print(arr[i]+" ");//遍历OK了
}
}
public static void maopao(int []arr){//写一个冒泡函数
for (int i=0;i<arr.length-1;i++){//只用进行length-1次排序就可以了
for (int j=0;j<arr.length-1-i;j++){ //y因为如果i=3说明他已经进行了3此排序那最后三个数的位置已经拍好了就不用再排,所以要减去i
if (arr[j]>arr[j+1]){
int temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;//交换位置
}
}
}
}
}
3.java中使用Arrays.sort()排序对一个数组进行排序
Arrays.sort(a);//全部元素排序
Arrays.sort(a, 0, 3);//部分排序,而且最后一个不进行排序,这里也就是下表为3的第四个数不进行排序。速度快但是不稳定
4.选择法排序
选择排序就是从第一趟开始,用第一个元素和剩下中的每一个元素比较,如果比第一
个小,就和第一个元素交换值,最后使得第一个元素中的值最小,第二趟选择出第二
小的放到第二元素,依次,使得数组有序。下面我们举例说明:
public class 选择排序 {
public static void main(String[] args) {
int arr[] = {1, 4, 6, 3, 8, 7};
xuanze(arr);
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}
public static void xuanze(int arr[]) {
for (int i = 0; i < arr.length; i++) {//第一层循环是控制循环的趟数
for (int j = i + 1; j < arr.length; j++) {
if (arr[i] > arr[j]) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}
}
网友评论