- // 判断一个字符串是否是对称字符串
分析: 判断一个字符串是否是对称的字符串,我只需要把第一个和最后一个比较,第二个和倒数第二个比较… 比较的次数是长度除以2。
import
java.util.Scanner;
public class StringBufferDemo {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
System.out.println(“请输入第一个字符串:”);
String s=sc.nextLine();
boolean b=isSame(s);
System.out.println(“b:”+b);
boolean b2=isSame2(s);
System.out.println(“b2:”+b2);
}
public static boolean isSame2(String s) {
return new StringBuffer(s).reverse().toString().equals(s);
}
public static boolean isSame(String s) {
boolean flag=true;
char[] chs=s.toCharArray();
for(int start=0,end=chs.length-1;start<=end;start++,end–) {
if(chs[start]!=chs[end]) {
flag=false;
break;
}
}
return flag;
}
}
- // 插入排序基本思想
将n个元素的数列分为已有序和无序两个部分,如插入排序过程示例下所示:
每次处理就是将无序数列第一个元素与有序数列的元素从后往前进行比较,
找出插入位置,将该元素插入到有序数列的合适位置中。
public class InsertSort {
public static void main(String[] args) {
int arr[]= {5,3,2,7,4,9};
for(int i=1;i<arr.length;i++) {
for(int j=i;(j>0)&&(arr[j]<arr[j-1]);j–) {
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]+",");
}
}
方法二:
import
java.util.Arrays;
public class ad {
public static void main(String[] args) {
int arr[]= {5,3,2,7,4,9};
for(int i=1;i<arr.length;i++) {
for(int j=i;(j>0)&&(arr[j]<arr[j-1]);j–) {
int temp=arr[j];
arr[j]=arr[j-1];
arr[j-1]=temp;
}
}
System.out.print(Arrays.toString(arr));
}
}
38.排序之快速排序
import
java.util.Scanner;
public class KuaiSu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println(“输入数组的长度n:”);
int n = sc.nextInt();
System.out.println(“输入数组:”);
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
sort(a, 0, a.length - 1);
System.out.println(“排序后的数组:”);
for (int i = 0; i < a.length; i++) {
System.out.print(a[i] + " ");
}
}
public static void sort(int[] a, int low, int high) {
int i = low;
int j = high;
int key = a[i];
while (j > i) {
// 从后往前比较
while (j > i && a[j] >= key) // 如果没有比关键值小的,比较下一个,直到有比关键值小的交换位置,然后又从前往后比较
j–;
if (a[j] <= key) {
int temp = a[j];
a[j] = a[i];
a[i] = temp;
}
// 从前往后比较
while (j > i && a[i] <= key)// 如果没有比关键值大的,比较下一个,直到有比关键值大的交换位置
i++;
if (a[i] >= key) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
// 此时第一次循环比较结束,关键值的位置已经确定了。左边的值都比关键值小,右边的值都比关键值大,但是两边的顺序还有可能是不一样的,进行下面的递归调用
}
// 递归
if (i > low)
sort(a, low, i - 1);// 左边序列。第一个索引位置到关键值索引-1
if (j < high)
sort(a, j + 1, high);// 右边序列从关键值索引+1到最后一个
}
}
39.排序之堆排序
40.排序之希尔排序