排序算法:冒泡排序
public static void main(String[] args){
int[] arr = new int[]{43,32,76,-98,0,64,32,15,108,-21,59};
//冒泡排序
for(int i = 0;i< arr.length - 1;i++){
for(int j = 0;j< arr.length - 1 -i;j++){
if(args[j] > arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
for(int i = 0;i< arr.length;i++){
System.out.print(arr[i]+"\t");
}
}
排序算法:快速排序
通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。
/**
* 快速排序
* 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,
* 则分别对这两部分继续进行排序,直到整个序列有序。
*/
public class QuickSort {
private static void swap(int[] data, int i, int j) {
int temp = data[i];
data[i] = data[j];
data[j] = temp;
}
private static void subSort(int[] data, int start, int end) {
if (start < end) {
int base = data[start];
int low = start;
int high = end + 1;
while (true) {
while (low < end && data[++low] - base <= 0)
;
while (high > start && data[--high] - base >= 0)
;
if (low < high) {
swap(data, low, high);
} else {
break;
}
}
swap(data, start, high);
subSort(data, start, high - 1);//递归调用
subSort(data, high + 1, end);
}
}
public static void quickSort(int[] data){
subSort(data,0,data.length-1);
}
public static void main(String[] args) {
int[] data = { 9, -16, 30, 23, -30, -49, 25, 21, 30 };
System.out.println("排序之前:\n" + java.util.Arrays.toString(data));
quickSort(data);
System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
}
}
数组的复制、反转、查询(线性查找、二分查找)
public static void main(String[] args){
String arr = new String[]{"AA","BB","JJ","GG","MM","DD"};
//数组的复制(区别于数组变量的赋值:arr1 = arr)
String[] arr1 = new String[arr.length];
for(int i = 0;i<arr1.length;i++){
arr1[i] = arr[i];
}
//数组的反转
//方式一:
for(int i =0;i < arr.length / 2;i++){
String temp =arr[i];
arr[i] = arr[arr.length - i -1];
arr[arr.length - i -1] = temp;
}
//方式二:
for(int i =0;j = arr.length -1;i<j;i++,j--){
String temp =arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//遍历
for(int i = 0;i < arr.length;i++){
System.out.print(arr[i]+"\t");
}
System.out.println();
//查找(搜索)
//线性查找
//思路:通过遍历的方式,一个一个的数据进行比较、查找。
//具普遍适用性
String dest = "BB";
boolean isFlag = true;
for(int i=0;i<arr.length;i++){
if(dest.equels(arr[i])){
System.out.println("找到指定的元素,位置为:"+i);
isFlag = false;
break;
}
}
if(isFlag){
System.out.println("很遗憾没有找到哦!");
}
//二分法查找
//前提,所有查询的数组必须有序
//每次比较中间值,折半的方式检索
int arr2 = new int[]{-98,-34,2,34,66,79,106,214,333};
int dest1 = -34;
int head = 0;//初始化的首索引
int end = arr2.length -1;//初始化末索引
boolean isFlag1 = true;
while(head < end){
int middle = (head + end)/2;
if(dest1 == arr2[middle]){
System.out.println("找到指定的元素,位置为:"+middle);
isFlag1 = false;
break;
}else if(arr2[middle] > dest1){
end = middle - 1;
}else{
head = middle + 1;
}
}
if(isFlag){
System.out.println("很遗憾没有找到哦!");
}
}
好了,我亲爱的读者朋友,以上就是本文的全部内容了!!!
觉得有点用记得给我点赞哦!
通过坚持不懈地学习,持续不断地输出,你的编程基本功算得上是突飞猛进。
为了帮助更多的程序员,专注于分享有趣的 Java 技术编程和有益的程序人生。一开始,阅读量寥寥无几,关注人数更是少得可怜。但随自己的不断努力,阅读量和关注人都在猛烈攀升。
绝对不容错过,期待与你的不期而遇。