前段时间面试时复习的几个排序算法。
一、冒泡排序:
package com.sort.test;
public class BubbleSortTest {
public static void main(String[] args) {
int[] data5 = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
print(data5);
bubbleSort(data5);
System.out.println("排序后的数组:");
print(data5);
}
public static void swap(int[] data, int i, int j) {
if (i == j) {
return;
}
data[i] = data[i] + data[j];
data[j] = data[i] - data[j];
data[i] = data[i] - data[j];
}
public static void bubbleSort(int[] data) {
for (int i = 0; i < data.length - 1; i++) {
// 记录某趟是否发生交换,若为false表示数组已处于有序状态
boolean isSorted = false;
for (int j = 0; j < data.length - i - 1; j++) {
if (data[j] > data[j + 1]) {
swap(data, j, j + 1);
isSorted = true;
print(data);
}
}
if (!isSorted) {
// 若数组已处于有序状态,结束循环
break;
}
}
}
public static void print(int[] data) {
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + "\t");
}
System.out.println();
}
}
二、快速排序:
package com.sort.test;
public class QuickSortTest {
private static int partition(int[] data, int i, int j) {
int pivot = data[i];
while (i < j) {
while (i < j && data[j] >= pivot)
--j;
data[i] = data[j];
while (i < j && data[i] <= pivot)
++i;
data[j] = data[i];
}
data[i] = pivot;
return i;
}
public static void quickSort(int[] data, int i, int j) {
if (i < j) {
int pivotLoc = partition(data, i, j);
quickSort(data, i, pivotLoc - 1);
quickSort(data, pivotLoc + 1, j);
}
}
public static void main(String[] args) {
int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
print(data);
quickSort(data, 0, data.length - 1);
System.out.println("排序后的数组:");
print(data);
}
public static void print(int[] data) {
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + "\t");
}
System.out.println();
}
}
三、选择排序:
package com.sort.test;
/**
* 选择排序
* @author Administrator
*
*/
public class SelectSortTest {
public static void main(String[] args) {
int[] data = new int[] { 5, 3, 6, 2, 1, 9, 4, 8, 7 };
print(data);
selectSort(data);
print(data);
}
public static void swap(int[] data, int i,int j) {
if (i == j) {
return;
}
data[i] = data[i] + data[j];
data[j] = data[i] - data[j];
data[i] = data[i] - data[j];
}
public static void selectSort(int[] data) {
for (int i = 0; i < data.length - 1; i++) {
int minIndex = i;//记录最小值的索引
for (int j = i + 1; j < data.length; j++) {
if (data[j] < data[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
swap(data, i, minIndex);
print(data);
}
}
}
public static void print(int[] data) {
for (int i = 0; i < data.length; i++) {
System.out.print(data[i] + "\t");
}
System.out.println();
}
}
分享到:
相关推荐
这份复习资料中可能包括了这些公司的历年笔试题,这些题目通常分为以下几个部分: 1. **算法与数据结构**:包括排序、查找、图论、动态规划等,这些都是面试的基础,也是衡量程序员基本功的重要标准。 2. **操作...
本文将深入探讨几种经典的排序算法,并通过Java实现来加深理解。 首先介绍的是插入排序。插入排序的工作原理是将未排序的元素逐个插入到已排序的序列中,确保每次插入后序列都是有序的。在Java代码中,我们定义了一...
### C++ 常见知识点面试复习 #### C++简介 C++是一种基于C语言发展起来的编程语言,它在保留C语言所有功能的同时,增加了面向对象编程(OOP)的能力,支持类、封装、继承、多态等特性。C++不仅支持面向对象编程,还...
善于引导面试官,比如当面试官问到什么问题不懂的时候,避免连问几个都不懂,可以尝试这么说:我***方面的知识比较匮乏,不是很了解,但是我对***的知识还是比较熟习,我觉得***的知识在我们华为性能与算法工程师...
面试中可能会涉及排序算法(如冒泡排序、快速排序、归并排序)、查找算法(如线性查找、二分查找)以及图论中的路径搜索算法(如Dijkstra算法、Floyd算法)。 2. **数据结构**:数据结构是组织和管理数据的方式,...
面试复习部分,可能会重点考察以下几个方面: 1. 数据结构与算法:理解常见的数据结构(如栈、队列、链表、树、图)及其操作,以及算法(排序、查找)的时间复杂度分析。 2. 面向对象设计:设计原则、设计模式,例如...
以下是几个典型的查找算法实例: 2. **二叉树的最长路径**:在二叉树中,最长路径是从一个节点到另一个节点的最长路径,路径上的边可以是向左或向右的。给出的代码实现了一个模板函数`BinTree<T>::LongestWay`,它...
Java的基础复习主要包括以下几个核心概念: 1. **语法基础**:Java的语法与C++相似,但更简洁。包括基本数据类型(如int、float、boolean等)、变量声明、控制结构(如if-else、for、while循环、switch-case)、...
在学习算法设计与分析时,以下几个关键知识点是必不可少的: 1. **排序算法**:包括快速排序、归并排序、堆排序、冒泡排序、插入排序和选择排序等。了解它们的时间复杂度和空间复杂度,以及各自的适用场景。 2. **...
1. 代码实现:例如,实现一个简单的排序算法或者设计一个特定功能的函数。 2. 逻辑分析:比如给出一段代码,让你分析其运行结果或者找出可能存在的问题。 3. 设计模式:考察你对软件设计模式的理解和应用能力。 4. ...
根据给定文件的信息,我们可以提炼出以下几个主要的知识点: ### 1. 文档的主要内容:数据结构与算法 - **数据结构**:是指在计算机科学中用于组织、管理和存储数据的有效方式,使得数据可以被高效地访问和修改。...
在面试中,C语言的题目往往涉及以下几个方面: 1. **基本语法**:指针、数组、结构体、联合体、枚举等基础知识,以及对内存管理的理解,如堆栈和堆的区别。 2. **数据结构**:链表、栈、队列、树(二叉树、AVL树、...
网络安全面试复习题主要涵盖以下几个核心知识点: 1. 入侵检测系统(IDS):IDS 是一种实时监控网络传输,及时发现可疑活动并发出警告或采取响应措施的安全设备。它的主要特点是积极主动的防御策略,起源于1980年代...
面试宝典中的内容可能涵盖以下几个方面: 1. **编程基础**:C/C++、Java、Python等主流编程语言的基本语法,包括变量、数据类型、控制流、函数、类与对象等。 2. **算法与数据结构**:掌握常见的排序算法(如冒泡...
在前端算法面试中,通常会考察以下几个核心知识点: 1. **数据结构**:数组、链表、栈、队列、哈希表、树(如二叉树、平衡树AVL和红黑树)以及图等。理解并能灵活运用这些数据结构解决实际问题,是基础中的基础。 ...
1. **面试高频算法**:这包括数据结构(如数组、链表、栈、队列、树、图)和算法(如排序、搜索、动态规划、贪心算法、回溯法)。理解并熟练运用这些算法是程序员面试中的关键部分,它们能够评估你的逻辑思维和问题...
综合以上信息,我们可以预想这份资源可能包括以下几个方面的知识点: 1. **基础编程语言知识**:如Java、Python、C++等,涵盖了语法、数据结构、算法等基础内容。 2. **Web开发**:HTML、CSS、JavaScript,以及前端...
从标签来看,我们可以推测这份压缩包包含了以下几个方面的内容: 1. **资源达人分享计划**:这可能意味着这些面试题是由有经验的IT从业者或专家精心整理的,他们通过分享自己的经验和知识,帮助其他人提升面试准备...
面试中,面试官通常会考察以下几个方面的知识: 1. **基础语法**:包括变量、数据类型、运算符、流程控制(如if-else、switch-case、循环)、函数、指针等。对于指针,理解其工作原理、内存管理以及如何使用指针...