黑马程序员——04Java各种排序方法和进制转换
来源:互联网 发布:360云计算 编辑:程序博客网 时间:2024/05/23 11:22
------------android培训、java培训、期待与您交流!------------
1,选择排序和冒泡排序
import java.util.*;public class SelectSort{ public static void main(String[] args){ int[] arr = {3,6,7,8,9,0,3}; //排序前 printArray(arr); //调用选择排序 selectSort(arr); //调用冒泡排序 bubbleSort(arr); //javaAPI提供的排序方法 Arrays.sort(arr); //排序后: printArray(arr); } //选择排序 public static void selectSort(int[] arr) { for (int x=0; x<arr.length-1 ; x++) { //内循环结束一次,最值出现头角标位置上。 for(int y=x+1; y<arr.length; y++) { if(arr[x]>arr[y]) swap(arr,x,y);//置换 } } } //冒泡排序 public static void bubbleSort(int[] arr){ for(int x=0; x<arr.length-1; x++){ //每次内循环定最大值在尾角标的位置。 for(int y=0; y<arr.length-x-1; y++) { //-x:让每一次比较的元素减少,-1:避免角标越界。 if(arr[y]<arr[y+1]) swap(arr,y,y+1); } } } /* 发现无论什么排序。都需要对满足条件的元素进行位置置换。所以可以把这部分相同的代码提取出来,单独封装成一个函数。 */ public static void swap(int[] arr,int a,int b){ int temp = arr[a]; arr[a] = arr[b]; arr[b] = temp; } //打印数组 public static void printArray(int[] arr){ System.out.print("["); for(int x=0; x<arr.length; x++){ if(x!=arr.length-1) System.out.print(arr[x]+", "); else System.out.println(arr[x]+"]"); } }}
2,快速排序是对冒泡排序的一种改进,下面是快速排序的代码。
/ * 思路: 1,对数组进行第一次排序,将其一分为二。 2,对低端子数组和高端子数组分别进行递归排序。 3,打印排序后的数组。 */ public class QuickSort{ public static void main(String[] args) { //定义一个int数组。 int[] arr = new int[]{5,1,6,4,2,8,9}; //调用快速排序的方法,实现int数组按升序排列。 quickSort(arr); //打印int数组。 printArray(arr); } //打印数组的方法。 private static void printArray(int[] arr){ System.out.print("["); for(int x=0; x<arr.length; x++){ if(x!=arr.length-1) System.out.print(arr[x]+", "); else System.out.println(arr[x]+"]"); } } //实现数组按升序排列的快速排序的方法。 private static void quickSort(int[] arr) { if (arr.length > 0) {//保证待排序的数组不为空 //调用方法subQuickSort(); subQuickSort(arr, 0, arr.length-1); } } //利用递归思想,对数组进行快速排序。 private static void subQuickSort(int[] arr, int low, int high) { if (low < high) { //将数组一分为二 ,并返回中轴位置。 int middle = getMiddle(arr, low, high); //对低端子数组进行递归排序 subQuickSort(arr, low, middle-1); //对高端子数组进行递归排序 subQuickSort(arr, middle + 1, high); } } //定义方法实现将数组一分为二,并返回中轴的位置。 private static int getMiddle(int[] arr, int low, int high) { //把数组的第一个元素作为中轴值。 int temp = arr[low]; while (low < high) { while (low < high && arr[high] > temp) high--; //比中轴值小的记录移到低端 arr[low] = arr[high]; while (low < high && arr[low] < temp) low++; //比中轴值大的记录移到高端 arr[high] = arr[low]; } //将中轴值记录到low现在所在的位置。 arr[low] = temp; //返回中轴的位置 return low; } }
3,进制转换
class NumberTrans { public static void main(String[] args) { //十进制转换为二进制 toBin(-6); //十进制转换为十六进制 toHex(-60); //十进制转换为八进制 toOct(60); //javaAPI提供的方法 System.out.println(Integer.toBinaryString(6)); System.out.println(Integer.toHexString(6)); } //十进制-->二进制 public static void toBin(int num){ trans(num,1,1); } //十进制-->八进制 public static void toOct(int num){ trans(num,7,3); } //十进制-->十六进制 public static void toHex(int num){ trans(num,15,4); } public static void trans(int num,int base,int offset){ if(num==0){ System.out.println(0); return ; } char[] chs = {'0','1','2','3' ,'4','5','6','7' ,'8','9','A','B' ,'C','D','E','F'}; char[] arr = new char[32]; int pos = arr.length; while(num!=0){ int temp = num & base;//位运算 arr[--pos] = chs[temp]; num = num >>> offset;//无符号右移offset位 } for(int x=pos; x<arr.length; x++){ System.out.print(arr[x]); } }}
此处重点掌握:
1,与位运算和无符号右移操作的思想 .
2,快速排序的递归思想.
1,与位运算和无符号右移操作的思想 .
2,快速排序的递归思想.
------------android培训、java培训、期待与您交流!------------
详情请查看:http://edu.csdn.net/heima
- 黑马程序员——04Java各种排序方法和进制转换
- 黑马程序员——Java中基本的进制转换、排序、查找
- 黑马程序员__排序、查找和进制转换
- 黑马程序员——进制转换方法
- 黑马程序员_各种排序方法
- 黑马程序员----JAVA中各种容器的区别和方法
- 黑马程序员 java基础——进制转换
- 黑马程序员——Java基础 数组排序的两种实现方法,选择和冒泡
- 黑马程序员——Java数组排序的常见方法
- 黑马程序员——java基础排序算法:选择排序、冒泡排序和插入排序
- 黑马程序员——进制转换
- 黑马程序员—学习笔记—各种排序法
- 黑马程序员——常用排序方法
- 黑马程序员—Java基础学习笔记之数据类型转换(自动转换和强制转换)
- 黑马程序员--Java进制的转换
- 黑马程序员——自学笔记3(java中各种方法的特点)
- 黑马程序员 Java基础——排序
- 黑马程序员—Java排序算法
- ios 获取系统版本号
- 解决Highcharts导出时中文变乱码
- Sort Colors
- 基于测试的项目进度管理(译文)
- oracle 中如何定位重要(消耗资源多)的SQL
- 黑马程序员——04Java各种排序方法和进制转换
- 通过Linux理解操作系统(五):内存管理(中)
- 深刻理解Python中的元类(metaclass)
- IOS控件AlertView的使用
- leetcode:Surrounded Regions
- JSP技术的发展趋势
- HTML URL编码参考
- EXTJs学习笔记(知识点总结)
- eclipse 插件