标签:归并 down point mis main 分割 htm 分享图片 any
线性查找示意图
②.方法实现:
public static <T>
boolean linearSearch(T[] data, int min, int max, T target)
{
int index = min;
boolean found = false;
while (!found && index <= max)
{
found = data[index].equals(target);
index++;
}
return found;
}
public static <T extends Comparable<T>>
boolean binarySearch(T[] data, int min, int max, T target)
{
boolean found = false;
int midpoint = (min + max) / 2; // determine the midpoint
if (data[midpoint].compareTo(target) == 0)
found = true;
else if (data[midpoint].compareTo(target) > 0)
{
if (min <= midpoint - 1)
found = binarySearch(data, min, midpoint - 1, target);
}
else if (midpoint + 1 <= max)
found = binarySearch(data, midpoint + 1, max, target);
return found;
}
五、顺序排序
①选择排序法概念: 遍历一次列表所有元素,将最大或最小的元素放在第一位,然后再次遍历该列表除此之外的元素,重复这些操作直到最后一位元素。选择示意图
代码实现:
public class SelectionSort {
public static void selectionSort(int[] a) {
int n = a.length;
for (int i = 0; i < n; i++) {
int k = i;
for (int j = i + 1; j < n; j++) {
if (a[j] < a[k]) {
k = j;
}
}
if (k > i) {
int tmp = a[i];
a[i] = a[k];
a[k] = tmp;
}
}
}
public static void main(String[] args) {
int[] b = { 49, 38, 65, 97, 76, 13, 27, 50 };
selectionSort(b);
for (int i : b)
System.out.print(i + " ");
}
}
插入排序法示意图
插入排序法代码实现:
public static void insertSort(int[] numbers)
{
int size = numbers.length;
int temp = 0 ;
int j = 0;
for(int i = 0 ; i < size ; i++)
{
temp = numbers[i];
for(j = i ; j > 0 && temp < numbers[j-1] ; j --)
{
numbers[j] = numbers[j-1];
}
numbers[j] = temp;
}
}
冒泡排序法示意图
冒泡排序法代码实现:
private static void bubbleSort(int[] sortNum)
{
int temp = 0;
for (int i = 0; i < sortNum.length-1; i++)
{
for (int j = 0; j < sortNum.length-1-i; j++)
{
if(sortNum[j+1]<sortNum[j])
{
temp = sortNum[j];
sortNum[j] = sortNum[j+1];
sortNum[j+1] = temp;
}
}
}
}
快速排序法图示
快速排序法代码实现:
public class QuickDemo {
public static void main(String[] args)
{
int[] arr = { 5,2,4,9,7 };
sort(arr, 0, arr.length - 1);
}
public static void sort(int arr[], int low, int high)
{
int l = low;
int h = high;
int k = arr[low];
while (l < h)
{
while (l < h && arr[h] >= k
{
h--;// h=6
}
if (l < h)
{
int temp = arr[h];
arr[h] = arr[l];
arr[l] = temp;
l++;
}
while (l < h && arr[l] <= k)
{
l++;
}
if (l < h)
{
int temp = arr[h];
arr[h] = arr[l];
arr[l] = temp;
h--;
}
}
print(arr);
System.out.print("l=" + (l + 1) + "h=" + (h + 1) + "k=" + k + "\n");
if (l > low)
if (h < high)
sort(arr, l + 1, high);
个位排序图
十位排序图
百位排序图
解答:首先插入排序的时间复杂度为O (n^2),冒泡排序的时间复杂度为O (n^2)。所以光从时间复杂度上是无法判断的,那么我们可以直接定义他们效率相同吗?显然是不行的,在pp9.3的编写过程中就明确规定要求出该问题的答案,在测试中可以一眼看出,冒泡排序花费的时间比插入排序少一些但是操作数远大于插入排序图对比
冒泡:
插入:
解答:由于二分排序法的大多方法都是递归实现排序的,且数据越多,对二分排序法时间要求不高,而顺序排序法则影响较大,如果要具体到多少个元素来判断零界点的话,只能具体问题具体分析。
问题1:在使用书上自带的检测类型时,发现超出范围的问题。图
解决:经过debug发现在第5个的时候超出范围了,后面检测循环条件的时候发现当第五个元素在于第七个元素比较的时候,数组为0-6,没有7则会报错,稍改一下条件就解决了图
问题2:在做pp9.2的时候出现了输出地址的情况图
解决:经过检查发现是使用sout的时候带入的变量错了多加一个S就出问题了。图
-图代码
基于评分标准,我给李楠的博客打分:7分。得分情况如下:
正确使用Markdown语法(加1分)
模板中的要素齐全(加1分)
教材学习中的问题和解决过程, (加3分)
代码调试中的问题和解决过程, 无问题
感想,体会真切的(加1分)
点评认真,能指出博客和代码中的问题的(加1分)
思路很清晰,写起来就难受。
代码行数(新增/累积) | 博客量(新增/累积) | 学习时间(新增/累积) | 重要成长 | |
---|---|---|---|---|
目标 | 5000行 | 30篇 | 400小时 | |
第一周 | 0/0 | 1/1 | 10/10 | |
第二周 | 0/0 | 1/2 | 10/20 | |
第三周 | 1500/1500 | 1/3 | 10/30 | |
第四周 | 2761/4261 | 2/5 | 25/55 | |
第五周 | 814/5075 | 1/6 | 15/70 |
20172333 2018-2019-1 《程序设计与数据结构》第五周学习总结
标签:归并 down point mis main 分割 htm 分享图片 any
原文地址:https://www.cnblogs.com/yanyujun527/p/9800522.html