package algorithm;
public class SortAlgorithm {
private void bubbleSort(int[] numList){//冒泡排序,从前往后扫描,比较相邻两个数的大小,如果发现逆序进行交换
int out,in;
for(out = numList.length-1;out>1;out--){//从后往前
for(in= 0;in<out;in++){
if(numList[in]>numList[in+1]){ //当前项大于后一项,交换
int temp = numList[in];
numList[in] = numList[in+1];
numList[in+1] = temp;
}
}
}
}
private void insertSort(int[] numList){//插入排序,将待排序的数据插入到有序数列中
int out,in;
// 从out处分开数列
for(out=1;out<numList.length;out++){
int temp = numList[out]; // 待排序的数据
in = out-1; //待排序数据的有序数列的最后一个数据
while(in>0&&numList[in]>temp){// 当待排序的数据小于数列值时
numList[in+1]=numList[in]; //数列向右移一位
--in; //指针向左移一位
}
numList[in+1] = temp; //插入待排序的数据
}
}
private void selectionSort(int[] numList){//选择排序
int out,in,temp,min;
for(out = 0;out<numList.length-1;out++){
min = out;
for(in= out+1;in<numList.length;in++){
if(numList[in]<numList[min]){
min = in;
}
// 交换
temp = numList[out];
numList[out] = numList[min];
numList[min] = numList[out];
}
}
}
private void display(int[] numList){
for(int j = 0;j<numList.length;j++){
System.out.print(numList[j]+" ");
}
System.out.println();
}
public static void main(String[] args){
SortAlgorithm sort = new SortAlgorithm();
int[] numList = new int[]{2,3,56,34,23,89,50};
System.out.print("未排序前的数列");
sort.display(numList);
long begin =System.currentTimeMillis();
sort.bubbleSort(numList);
long end = System.currentTimeMillis();
System.out.print("冒泡排序用时"+(end-begin)+"排序后:");
sort.display(numList);
begin =System.currentTimeMillis();
sort.selectionSort(numList);
end = System.currentTimeMillis();
System.out.print("选择排序用时"+(end-begin)+"排序后:");
sort.display(numList);
begin =System.currentTimeMillis();
sort.insertSort(numList);
end = System.currentTimeMillis();
System.out.print("插入排序用时"+(end-begin)+"排序后:");
sort.display(numList);
}
}
归并算法:
01.import java.util.Arrays;
02.import java.util.Comparator;
03.public class MergeSort {
04. public static <T> void merge(T[] a, int p, int q, int r,
05. Comparator<? super T> c) {
06. T[] left = Arrays.copyOfRange(a, p, q);
07. T[] right = Arrays.copyOfRange(a, q, r);
08. int indexLeft = 0;
09. int indexRight = 0;
10. for (int i = p; i < r; i++) {
11. if (indexLeft >= left.length) {
12. break;
13. }
14. if (indexRight >= right.length) {
15. System
16. .arraycopy(left, indexLeft, a, i, left.length
17. - indexLeft);
18. break;
19. }
20. if (c.compare(left[indexLeft], right[indexRight]) < 0) {
21. a[i] = left[indexLeft++];
22. } else {
23. a[i] = right[indexRight++];
24. }
25. }
26. }
27. public static <T> void mergeSort(T[] a, int p, int r,
28. Comparator<? super T> c) {
29. if (p + 1 < r) {
30. int q = (p + r) / 2;
31. mergeSort(a, p, q, c);
32. mergeSort(a, q + 1, r, c);
33. merge(a, p, q, r, c);
34. }
35. }
36. public static <T> void mergeSort(T[] a, Comparator<? super T> c) {
37. mergeSort(a, 0, a.length, c);
38. }
39. public static void main(String[] args) {
40. // merge's test
41. System.out.println("merge method test");
42. Integer[] tempMerge = new Integer[] { 1, 4, 7, 11, 14, 17, 2, 4, 6, 8,
43. 10, 20, 30, 40 };
44. merge(tempMerge, 0, 6, tempMerge.length, new Comparator<Integer>() {
45. @Override
46. public int compare(Integer o1, Integer o2) {
47. return o1 - o2;
48. }
49. });
50. for (int i : tempMerge) {
51. System.out.print(i + " ");
52. }
53. System.out.println();
54. // mergeSort's test
55. System.out.println("mergeSort method test");
56. Integer[] tempMergeSoft = new Integer[] { 5, 2, 4, 6, 1, 3, 2, 6 };
57. mergeSort(tempMergeSoft, new Comparator<Integer>() {
58. @Override
59. public int compare(Integer o1, Integer o2) {
60. return o1 - o2;
61. }
62. });
63. for (int i : tempMergeSoft) {
64. System.out.print(i + " ");
65. }
66. System.out.println();
67. }
68.}
另外:判断一个数是完全平方数,使用Math.floor(Math.sqrt(n))==Math.sqrt(n)
如Math.sqrt(9)==Math.floor(Math.sqrt(9)返回true,因为3.0==3.
回文数即对称数字,可以使用栈来判断。入栈和出栈顺序一样,或者直接进行前后数字的比较
判断一个数是否是2的次幂,用if(((d&(d-1))==0)&&(d!=0))
java中有栈Stack的实现,下面是栈的类继承结构;
类 Stack<E>
java.lang.Object
java.util.AbstractCollection<E>
java.util.AbstractList<E>
java.util.Vector<E>
java.util.Stack<E>
分享到:
相关推荐
本文将深入探讨使用汇编语言实现的选择排序、插入排序和冒泡排序这三种经典的排序算法。 **选择排序(Selection Sort)** 选择排序是一种简单直观的排序算法。它的基本思想是在未排序的序列中找到最小(或最大)...
直接插入排序 选择排序 堆排序 归并排序 快速排序 冒泡排序等七种排序方法
选择排序、插入排序、冒泡排序以及快速排序和归并排序的C语言实现,绝对可用
交换排序 选择排序 冒泡排序 插入排序
本文将深入探讨四种在C++中实现的常见排序算法:插入排序、冒泡排序、堆排序和快速排序。这些算法各有特点,适用于不同的场景,理解并掌握它们对于提升编程能力至关重要。 1. **插入排序**: 插入排序是一种简单的...
数据结构(c语言版)严蔚敏 吴伟民编著 中直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现、归并排序,使用c语言实现
直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序和二路归并排序是计算机科学中经典的排序算法,它们在数据处理和算法学习中占有重要地位。这些排序算法各有特点,适用场景不同,下面将逐一详细介绍,并结合...
冒泡排序、选择排序和插入排序是三种基本的排序算法,它们都是在计算机科学中用于组织数据的关键技术。这些算法的实现通常用作教学示例,帮助初学者理解排序过程和时间复杂性。 **冒泡排序(Bubble Sort)**: 冒泡...
在本文中,我们将深入探讨四种经典的排序算法:插入排序、选择排序、基数排序和冒泡排序,以及它们在C++语言中的实现。 **插入排序(Insertion Sort)** 插入排序是一种简单直观的排序算法,它的工作原理类似于我们...
本资源包含了几种常见的排序算法,包括堆排序、选择排序、冒泡排序、归并排序和插入排序。这些排序算法各有特点,适用于不同的场景,并且在理解它们的工作原理后,能够帮助初学者更好地掌握编程基础。 1. **堆排序*...
本文将详细讨论三种基础的排序算法:选择排序、插入排序和冒泡排序。这些算法虽然简单,但在理解计算机如何执行排序操作方面起着至关重要的作用。 首先,我们来看**选择排序**(Selection Sort)。它的工作原理是...
总的来说,这段代码提供了四种排序算法的实现,分别是冒泡排序、选择排序、插入排序以及Java内置的数组排序。每种排序算法都有其适用场景,理解这些算法可以帮助我们更好地解决实际问题,并根据需求选择合适的排序...
本文将详细讲解六种经典的排序算法——合并排序、插入排序、希尔排序、快速排序、冒泡排序以及桶排序,并结合提供的文件名(sort.c、set.c、main.c、set.h、sort.h)推测出每个文件可能包含的代码实现。 1. **合并...
以下是关于"冒泡排序,选择排序,插入排序,希尔排序,堆排序,归并排序,快速排序"这七种常见排序算法的源码实现及相关知识点的详细解释: 1. **冒泡排序**:冒泡排序是一种简单的排序算法,它重复地遍历待排序的...
本话题主要探讨六种内部排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序以及堆排序。这六种排序算法各有优劣,适用于不同的场景,接下来我们将逐一进行详细阐述。 1. **直接插入排序**: 直接...
在本文中,我们将深入探讨三种基本的排序算法:插入排序、选择排序和冒泡排序。这些算法是计算机科学中基础且重要的部分,特别是在理解数据结构和算法效率方面。以下是对每种排序算法的详细说明: **插入排序...
采用c++描述了各种排序算法,包括选择排序 冒泡排序 插入排序 基数排序 快速排序 归并排序 。实验内容 1、创建排序类。 2、提供操作:选择排序、冒泡排序、插入排序、*基数排序、*快速排序、*归并排序。 3、*能够...
本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...
有一个模板类写出了快速排序,冒泡排序,插入排序,选择排序四种算法。用的是C++哦
排序算法java版,速度排行:冒泡排序、简单选择排序、直接插入排序、折半插入排序、希尔排序、堆排序、归并排序、快速排序.mht