冒泡排序
int[] arr={3,3,6,7,2,5,8};
//找到当前最大的数,挪位置
//有几个数来几次
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr.length-1; j++) {
if (arr[j]>arr[j+1]) {
int c=0;
c=arr[j];
arr[j]=arr[j+1];
arr[j+1]=c;
}
}
}for (int i:arr) {
//遍历,加强for(类型变量名,需要遍历的目标)变量用来代表每次遍历的值
//特点:没有了下标
System.out.print(i+" ");
} 优化
//冒泡排序
for (int i = 0; i < arr.length-1; i++) {//排序的趟数
for (int j = 0; j < arr.length-i-1; j++) {//每一趟比较次数
if (arr[j]>arr[j+1]) {//>升序,<降序
int c=0;
c=arr[j];
arr[j]=arr[j+1];
arr[j+1]=c;
}
}
}for (int i:arr) {
System.out.print(i+" ");
}再次优化
package com.neuedu.three;
public class Test6 {
public static void main(String[] args) {
int[]arr = {9,2,3,4,5,6,7,8};
int count = 0;
//找到当前最大的数,挪位置
//有几个数来几次
boolean flag ;
for (int j = 0; j < arr.length-1-j; j++) {
flag = true;
for (int i = 0,x = arr.length-1-j; i < arr.length-1&&x>0; i++,x--) {
count++;
int temp1 = 0;
if(arr[i]>arr[i+1]) {
flag = false;
temp1 = arr[i+1];
arr[i+1] = arr[i];
arr[i] = temp1;
}
int temp2 = 0;
if(arr[x]<arr[x-1]) {
flag = false;
temp2 = arr[x-1];
arr[x-1] = arr[x];
arr[x] = temp2;
}
}
if(flag) {
break;
}
}
System.out.println(count);
for (int i : arr) {
System.out.print(i+",");
}
}
}
选择排序
int[]arr = {5,7,3,1,8,3};//数组初始化
int maxIndex;//记录当前最大元素的下标
for (int j = 0; j < arr.length-1; j++) {//排序趟数
maxIndex = 0;//置零保证每次从第一个元素开始比较
for (int i = 1; i < arr.length-j; i++) {//i=1是因为默认maxIndex为0,默认每趟比较次数
if(arr[maxIndex]<arr[i]) {//判断大小,如果下标为i的元素大于下标为maxIndex的元素
maxIndex = i;//更新最大元素的下标
}
}
//将大的元素换到后边,第j次换到倒数第j个元素位置
int temp = arr[arr.length-1-j] ;//中间变量存储一个值
arr[arr.length-1-j] = arr[maxIndex];
arr[maxIndex] = temp;
}
for (int i : arr) {
System.out.print(i+" ");
}性能最优的排序 桶排序
int count=0;
int[] arr={3,5,6,7,12,4,7};
int[] brr=new int [13];
for (int i = 0; i < arr.length; i++) {
brr[arr[i]]++;
}
for (int i = 0; i < brr.length; i++) {
while (brr[i]-->0) {
System.out.print(i+" ");
//arr[count++]=i;
}
}System.out.println();
//for(int i:arr){//加强for循环遍历数组
// System.out.print(i+" ");
//}二分查找(前提是已经升序排序)
int []arr={1,2,3,4,5,6,7,8,9};
int max=arr.length-1,min=0,local=-1;
//值为6的元素的下标
int key=6;
int mid;
while(max>=min){
mid=(max+min)/2;
if (arr[mid]==key) {
local=mid;
System.out.println(local);
break;
}else if (arr[mid]>key) {
max=mid-1;
}else {
min=mid+1;
}
}
if (local==-1) {
System.out.println("数组中不存在元素" + key);
}
版权声明:本文为yyy1350956533原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。