冒泡排序
冒泡排序原理
冒泡排序代码:
-
数组排序之冒泡排序:
-
相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
<span style="color: #008000;">*/
<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> ArrayDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;"> 定义一个数组
<span style="color: #0000ff;">int[] arr = { 24,69,80,57,13<span style="color: #000000;"> };
System.out.println("排序前:"<span style="color: #000000;">);
printArray(arr);bubbleSort(arr); System.out.println(</span>"排序后:"<span style="color: #000000;">); printArray(arr);
}
<span style="color: #008000;">//<span style="color: #008000;">冒泡排序代码
<span style="color: #008000;">/<span style="color: #008000;">总共需要比较数组长度-1次,x < arr.length - 1
每一次比较完,下一次就会减少一次元素的比较。第一次比较有0个元素不比,第二次有1个元素不比,,,,所以 y < arr.length - 1 - x
*两两比较,大的往后放- <span style="color: #008000;">*/
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void bubbleSort(<span style="color: #0000ff;">int<span style="color: #000000;">[] arr){
<span style="color: #ff0000;">for (int x = 0; x < arr.length - 1; x++) {
for (int y = 0; y < arr.length - 1 - x; y++) {
if (arr[y] > arr[y + 1]) {
int temp = arr[y];
arr[y] = arr[y + 1];
arr[y + 1] =<span style="color: #000000;"><span style="color: #ff0000;"> temp;
}
}
}
}
<span style="color: #008000;">//<span style="color: #008000;"> 遍历功能
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void printArray(<span style="color: #0000ff;">int<span style="color: #000000;">[] arr) {
System.out.print("["<span style="color: #000000;">);
<span style="color: #0000ff;">for (<span style="color: #0000ff;">int x = 0; x < arr.length; x++<span style="color: #000000;">) {
<span style="color: #0000ff;">if (x == arr.length - 1<span style="color: #000000;">) {
System.out.print(arr[x]);
} <span style="color: #0000ff;">else<span style="color: #000000;"> {
System.out.print(arr[x] + ","<span style="color: #000000;">);
}
}
System.out.println("]"<span style="color: #000000;">);
}
} - <span style="color: #008000;">*/
选择排序
选择排序原理图
选择排序代码
-
数组排序之选择排序:
-
从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
<span style="color: #008000;">*/
<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> ArrayDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;"> 定义一个数组
<span style="color: #0000ff;">int[] arr = { 24,13<span style="color: #000000;"> };
System.out.println("排序前:"<span style="color: #000000;">);
printArray(arr);</span><span style="color: #008000;">//</span><span style="color: #008000;">用<a href="/tag/fangfa/" target="_blank" class="keywords">方法</a>改进</span>
<span style="color: #000000;"> selectSort(arr);
System.out.println("排序后:"<span style="color: #000000;">);
printArray(arr);}
<span style="color: #008000;">/*<span style="color: #008000;">- 数组排序
- <span style="color: #008000;">*/
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void selectSort(<span style="color: #0000ff;">int<span style="color: #000000;">[] arr){
<span style="color: #ff0000;">for(int x=0; x<arr.length-1; x++){
for(int y=x+1; y<arr.length; y++){
if(arr[y] <arr[x]){
int temp = arr[x];
arr[x] = arr[y];
arr[y] =<span style="color: #000000;"><span style="color: #ff0000;"> temp;
}
}
}
}
<span style="color: #008000;">//<span style="color: #008000;"> 遍历功能
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void printArray(<span style="color: #0000ff;">int<span style="color: #000000;">[] arr) {
System.out.print("["<span style="color: #000000;">);
<span style="color: #0000ff;">for (<span style="color: #0000ff;">int x = 0; x < arr.length; x++<span style="color: #000000;">) {
<span style="color: #0000ff;">if (x == arr.length - 1<span style="color: #000000;">) {
System.out.print(arr[x]);
} <span style="color: #0000ff;">else<span style="color: #000000;"> {
System.out.print(arr[x] + ","<span style="color: #000000;">);
}
}
System.out.println("]"<span style="color: #000000;">);
}
}
二分查找法
二分查找法原理
二分法的代码实现:
-
查找:
-
基本查找:数组元素无序(从头找到尾)
-
二分查找(折半查找):<span style="color: #ff0000;">数组元素有序
-
分析:
-
A:定义最大索引,最小索引
-
B:计算出中间索引
-
C:拿中间索引的值和要查找的值进行比较
-
相等:就返回当前的中间索引
-
不相等:
-
大 左边找
-
小 右边找
-
D:重新计算出中间索引
-
大 左边找
-
max = mid - 1;
-
小 右边找
-
min = mid + 1;
-
E:回到B
<span style="color: #008000;">*/
<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> ArrayDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;">定义一个数组
<span style="color: #0000ff;">int[] arr = {11,22,33,44,55,66,77<span style="color: #000000;">};</span><span style="color: #008000;">//</span><span style="color: #008000;">写<a href="/tag/gongneng/" target="_blank" class="keywords">功能</a>实现</span> <span style="color: #0000ff;">int</span> index = getIndex(arr,33<span style="color: #000000;">); System.out.println(</span>"index:"+<span style="color: #000000;">index); </span><span style="color: #008000;">//</span><span style="color: #008000;">假如这个元素不存在后有什么现象呢?</span> index = getIndex(arr,333<span style="color: #000000;">); System.out.println(</span>"index:"+<span style="color: #000000;">index);
}
<span style="color: #008000;">/*<span style="color: #008000;">
-
两个明确:
-
返回值类型:int
-
参数列表:int[] arr,int value
<span style="color: #008000;">*/
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">int getIndex(<span style="color: #0000ff;">int[] arr,<span style="color: #0000ff;">int<span style="color: #000000;"> value){
<span style="color: #008000;">//<span style="color: #008000;">定义最大索引,最小索引
<span style="color: #0000ff;">int max = arr.length -1<span style="color: #000000;">;
<span style="color: #0000ff;">int min = 0<span style="color: #000000;">;<span style="color: #008000;">//<span style="color: #008000;">计算出中间索引
<span style="color: #0000ff;">int mid = (max +min)/2<span style="color: #000000;">;<span style="color: #008000;">//<span style="color: #008000;">拿中间索引的值和要查找的值进行比较
<span style="color: #0000ff;">while(arr[mid] !=<span style="color: #000000;"> value){
<span style="color: #0000ff;">if(arr[mid]><span style="color: #000000;">value){
max = mid - 1<span style="color: #000000;">;
}<span style="color: #0000ff;">else <span style="color: #0000ff;">if(arr[mid]<<span style="color: #000000;">value){
min = mid + 1<span style="color: #000000;">;
}</span><span style="color: #ff0000;">//加入判断 if(min > max){ return -1</span><span style="color: #000000;"><span style="color: #ff0000;">; } </span> mid </span>= (max +min)/2<span style="color: #000000;">;
}
<span style="color: #0000ff;">return<span style="color: #000000;"> mid;
}
}
-
Arrays类
<span style="color: #008000;">/*<span style="color: #008000;">
-
Arrays:针对数组进行操作的工具类。比如说排序和查找。
-
1:public static String toString(int[] a) 把数组转成字符串
-
2:public static void sort(int[] a) 对数组进行排序
-
3:public static int binarySearch(int[] a,int key) 二分查找
<span style="color: #008000;">*/
<span style="color: #0000ff;">public <span style="color: #0000ff;">class<span style="color: #000000;"> ArraysDemo {
<span style="color: #0000ff;">public <span style="color: #0000ff;">static <span style="color: #0000ff;">void<span style="color: #000000;"> main(String[] args) {
<span style="color: #008000;">//<span style="color: #008000;"> 定义一个数组
<span style="color: #0000ff;">int[] arr = { 24,13<span style="color: #000000;"> };</span><span style="color: #008000;">//</span><span style="color: #008000;"> public static String toString(int[] a) 把数组转成字符串</span> System.out.println("排序前:" +<span style="color: #000000;"> Arrays.toString(arr)); </span><span style="color: #008000;">//</span><span style="color: #008000;"> public static void sort(int[] a) 对数组进行排序</span>
<span style="color: #000000;"> Arrays.sort(arr);
System.out.println("排序后:" +<span style="color: #000000;"> Arrays.toString(arr));</span><span style="color: #008000;">//</span><span style="color: #008000;"> [13,24,80] </span><span style="color: #008000;">//</span><span style="color: #008000;"> public static int binarySearch(int[] a,int key) 二分查找</span> System.out.println("binarySearch:" + Arrays.binarySearch(arr,57<span style="color: #000000;">)); System.out.println(</span>"binarySearch:" + Arrays.binarySearch(arr,577<span style="color: #000000;">));
}
}