这是用java实现的排序
- package sort_algorithm;
- public class MaoPao {
- public static int[] sort(int a[]){//排序静态函数,实现排序功能
- int len = a.length;//获得数组长度
- int temp;//临时变量,用于交换值
- for (int i = 0; i < len-1; i++){//通过循环实现主要算法
- for (int j = 0; j < len-1-i; j++){
- if (a[j+1] > a[j]){//如果后一下值比前一个值大,则交换两个值的大小,
- temp = a[j+1]; //很显然是从大到小排序
- a[j+1] = a[j];
- a[j] = temp;
- }
- }
- }
- return a;
- }
- public static void print (int a[]){//打印输出数组
- int len = a.length;
- for (int i = 0; i < len; i++){
- System.out.print(a[i] + "、");
- }
- }
- public static void main (String[] args){ //主方法
- int a[] = {2,1,5,7,3,9,4,8}; //定义一个测试数组
- System.out.println ("排序前");
- print (a);
- a = sort (a);
- System.out.println ("/n排序后");
- print (a);
- }
- }
插入排序
- package sort_algorithm;
- public class InsertSort {
- public static int[] sort(int a[]){//排序静态函数,实现排序功能
- int len = a.length;//获得数组长度
- int key;
- int i = 0;
- for (int j = 1 ; j < len ; j++){
- key = a[j] ;
- i = j - 1 ;
- while (i > -1 && a[i] > key){
- a[i+1] = a[i] ;
- i = i - 1 ;
- }
- a[i+1] = key ;
- }
- return a;
- }
- public static void print (int a[]){//打印输出数组
- int len = a.length;
- for (int i = 0; i < len; i++){
- System.out.print(a[i] + "、");
- }
- }
- public static void main (String[] args){
- int a[] = {2,1,5,7,3,9,4,8,6,10};
- System.out.println ("排序前");
- print (a);
- a = sort (a);
- System.out.println ("/n排序后");
- print (a);
- }
- }
动态生成数组和生成一定范围的随机数
- package sort_algorithm;
- import java.util.Random ;
- public class GenerateRand {
- //
- public static boolean generateRand(int[] tempArray, int num, int max, int min){
- Random random = new Random();
- if (num < 0 || min > max){//如果数组大小不满足或者小的数反而大于大的数,则返回false不做任何操作
- return false ;
- }else {
- for (int i = 0; i < num; i++){
- //关键代码:生成随机数
- int rand = (int) (min + random.nextInt(max-min));
- tempArray[i] = rand;
- }
- return true ;
- }
- }
- public static void print (int[] a){
- int len = a.length; //得到数组长度
- for (int i = 0; i < len; i++){
- System.out.print(a[i] + "、");//打印数组元素
- if ((i+1)%20 == 0 && i != 0){//每20个数换行一次
- System.out.print("/n");
- }
- }
- }
- public static void main (String[] args){
- int num=1000,max=150,min=30; //生成num个大于30,小于150的随机数
- int[] tempArray = new int[num]; //动态生成数组
- if (generateRand (tempArray, num, max, min)){
- System.out.print("生成的随机数如下:/n");
- print (tempArray);
- }
- }
- }
汉诺塔问题
- public class Hanoi {
- public static void hanoi(int n, char a, char b, char c){
- if (n == 1){
- System.out.println("盘子" + n + "从 " + a + "移动到" + b );
- }else {
- hanoi (n-1, a, c, b);
- System.out.println("盘子" + n + "从 " + a + "移动到" + b );
- hanoi (n-1, c, b, a);
- }
- }
- public static void main (String[] args){
- int n = Integer.parseInt(args[0]);
- hanoi(n, 'A', 'B', 'C');
- }
- }
100~999的 水仙花数
- /*
- * 题目:打印出所有的 "水仙花数 ",所谓 "水仙花数 "是指一个三位数,
- * 其各位数字立方和等于该数本身。例如:153是一个 "水仙花数 ",
- * 因为153=1的三次方+5的三次方+3的三次方。
- * 程序分析:利用for循环控制100-999个数,每个数分解出个位,十位,百位。
- */
- package com.cheng.peng;
- public class ShuiXianHua {
- public static void main (String[] args){
- int[] a = new int[3];
- int temp = 0;
- for (int i = 100; i <= 999; i++){
- a[0] = i % 10 ; //保存了3位数的个位
- a[1] = i / 10 % 10; //保存了3位数的十位
- a[2] = i /100 ; //保存了3位数的百位
- temp = count (a[0]) + count (a[1]) + count (a[2]);
- if (i == temp){
- System.out.print (i + "/t");
- }
- }
- }
- public static int count (int n){
- return (n*n*n);
- }
- }
求100~200的素数
- /*
- * 题目:判断101-200之间有多少个素数,并输出所有素数。
- * 1.程序分析:判断素数的方法:用一个数分别去除2到sqrt(这个数),如果能被整除,
- * 则表明此数不是素数,反之是素数。
- */
- package com.cheng.peng;
- public class Prime{
- private static int j;
- public static void main (String[] args){
- for (int i = 101; i <= 199 ; i++){
- for (j = 2; j <= (int)Math.sqrt (i); j++){
- if ((i % j) !=0){
- continue;
- }else {
- break;
- }
- }
- if (j > (int)Math.sqrt (i)){
- System.out.print (i + "/t");
- }
- }
- }
- }
(a> b)?a:b练习
- /*
- * 题目:利用条件运算符的嵌套来完成此题:学习成绩> =90分的同学用A表示,60-89分之
- * 间的用B表示,60分以下的用C表示。
- * 1.程序分析:(a> b)?a:b这是条件运算符的基本例子。
- *
- */
- package com.cheng.peng;
- public class If_Else{
- public static void main (String[] args){
- int n = Integer.parseInt (args[0]);
- System.out.print ( n >= 90 ? "A" : ( n < 60 ? "C":"B" ) );
- }
- }
统计一行字符串中 数字,字母,其他字符,空格的个数
- //这道程序有错
- /*
- * 题目:输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
- * 1.程序分析:利用while语句,条件为输入的字符不为 '/n '.
- *
- */
- package com.cheng.peng;
- public class Statistics{
- public static void main (String[] args){
- int[] a = new int[4] ;
- int i = 0 ;
- StringBuffer sb = new StringBuffer() ;
- for (int j = 0; j < args.length; j++){
- sb.append (args[j]+" ") ;
- }
- while (sb.charAt (i) != '/n' && i < sb.length()-1){
- if ( 'a' <= sb.charAt (i) && sb.charAt (i) <= 'z' ||
- 'A' <= sb.charAt (i) && sb.charAt (i) <= 'Z'){
- a[0]++ ;
- }else if (sb.charAt (i) == ' '){
- a[1]++ ;
- }else if ('0' <= sb.charAt (i) && sb.charAt (i) <= '9'){
- a[2]++ ;
- }else {
- a[3]++ ;
- }
- i++ ;
- }
- System.out.println ("字母数有:" + a[0]);
- System.out.println ("空格数有:" + a[1]);
- System.out.println ("数字有:" + a[2]);
- System.out.println ("其他字符有:" + a[3]);
- }
- }
二分查找一个任意随机生成数列的程序(满足随机生成一定数目的数列,实现排序功能,进行二分查找任意一个数,如果不存在返回-1,存在返回数列中的位置,并记录程序执行的次数)
- /**
- * 插入排序程序
- * @author:彭城基
- * @创建时间:2010-09-20
- */
- package sort_algorithm ;
- import java.util.* ;
- import java.io.* ;
- public class BinarySearch {
- static int[] n = new int[1]; //保存在二分查找中,查找关键字的次数
- public static boolean generateRand(int[] tempArray, int num, int max, int min){
- Random random = new Random();
- if (num < 0 || min > max){//如果数组大小不满足或者小的数反而大于大的数,则返回false不做任何操作
- return false ;
- }else {
- for (int i = 0; i < num; i++){
- //关键代码:生成随机数
- int rand = (int) (min + random.nextInt(max-min));
- tempArray[i] = rand;
- }
- return true ;
- }
- }
- public static int[] sort(int a[]){ //插入排序实现代码
- int len = a.length;//获得数组长度
- int key;
- int i = 0;
- for (int j = 1 ; j < len ; j++){
- key = a[j] ;
- i = j - 1 ;
- while (i > -1 && a[i] > key){
- a[i+1] = a[i] ;
- i = i - 1 ;
- }
- a[i+1] = key ;
- }
- return a;
- }
- public static int binarySearch (int []a , int key , int[] n){//二分查找实现代码
- int left = 0 ; //左区间的边界
- int right = a.length - 1 ; //右区间的边界
- while (left <= right){
- int middle = (left+right) / 2 ;
- if (key == a[middle]){
- n[0]++ ;
- return middle ;
- }
- if (key > a[middle]){
- left = middle + 1 ;
- }else {
- right = middle -1 ;
- }
- n[0]++ ;
- }
- return -1 ;
- }
- public static void print (int[] a){
- int len = a.length; //得到数组长度
- for (int i = 0; i < len; i++){
- System.out.print(a[i] + "、");//打印数组元素
- if ((i+1)%20 == 0 && i != 0){//每20个数换行一次
- System.out.print("/n");
- }
- }
- }
- public static void main (String[] args) throws Exception{
- if (args.length != 3){
- System.out.println ("尊敬的用户,输入的格式应为 java sort_algorithm.BinarySearch 参数一(num) 参数二(max) 参数三(min)/n");
- return ;
- }
- int num = Integer.parseInt (args[0]); //生成的随机数的个数num
- int max = Integer.parseInt (args[1]); //上界为max
- int min = Integer.parseInt (args[2]); //下界为min
- int[] tempArray = new int[num]; //动态生成数组
- int key; //你所要查找的数字
- n[0] = 0 ;
- int temp;
- System.out.println ("随机数个数为:" + num);
- System.out.println ("上界为:" + max);
- System.out.println ("下界为:" + min);
- if (generateRand (tempArray, num, max, min)){
- tempArray = sort (tempArray);
- print (tempArray);
- BufferedReader reader = new BufferedReader(new InputStreamReader (System.in));
- System.out.print ("/n请输入需要在" + num + "个随机数中查找的数字key: ");
- String str = reader.readLine ();
- key = Integer.parseInt (str);
- if ((temp = binarySearch (tempArray , key , n)) == -1){
- System.out.println ("找不到key(" + key + ")一共查找了" + n[0] + "次");
- }else {
- System.out.println ("找到key(" + key + "),为第" + (temp+1) + "个数,一共查找了" + n[0] + "次");
- }
- }else {
- System.out.println ("num < 0 或者 min > max 啦!");
- }
- }
- }
递归算兔子数目
- /*
- * 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,
- * 小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
- * 1.程序分析: 兔子的规律为数列1,1,2,3,5,8,13,21....
- *
- */
- package sort_algorithm ;
- import java.util.* ;
- public class Fibonacci {
- public static int fibonacci (int n){
- if (n <= 1){
- return 1 ;
- }else {
- return fibonacci (n-1) + fibonacci (n-2);
- }
- }
- public static void main (String[] args){
- Scanner scan = new Scanner (System.in);
- //scan.useDelimiter ("/n");
- int n ; //保存月份
- int number ; //保存兔子数目
- System.out.print ("输入第几个月:");
- String month = scan.next ();
- n = Integer.parseInt (month);
- number = fibonacci (n); //调用递归函数
- System.out.println ("第" + n + "个月,兔子的数目为 " + number);
- }
- }
打印菱形
- /*
- 打印出如下图案(菱形)
- *
- ***
- *****
- *******
- *****
- ***
- *
- */
- package sort_algorithm ;
- public class Diamond {
- public static void main (String[] args){
- for (int i = 1 ; i <= 4 ; i++){
- for (int j = 0 ; j < 2*i-1; j++){
- System.out.print ("*");
- }
- System.out.print ("/n");
- }
- for (int i = 3 ; i >0 ; i--){
- for (int j = 0 ; j < 2*i-1 ; j++){
- System.out.print ("*");
- }
- System.out.print ("/n");
- }
- }
- }