`
sunshine_beach
  • 浏览: 1494 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

面试时复习的几个排序算法

阅读更多
前段时间面试时复习的几个排序算法。
一、冒泡排序:
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();
	}
}

分享到:
评论

相关推荐

    最新各IT公司互联网BAT谷歌微软等笔试面试真题复习资料

    这份复习资料中可能包括了这些公司的历年笔试题,这些题目通常分为以下几个部分: 1. **算法与数据结构**:包括排序、查找、图论、动态规划等,这些都是面试的基础,也是衡量程序员基本功的重要标准。 2. **操作...

    排序算法复习大全(Java实现).doc

    本文将深入探讨几种经典的排序算法,并通过Java实现来加深理解。 首先介绍的是插入排序。插入排序的工作原理是将未排序的元素逐个插入到已排序的序列中,确保每次插入后序列都是有序的。在Java代码中,我们定义了一...

    c++常见知识点面试复习

    ### C++ 常见知识点面试复习 #### C++简介 C++是一种基于C语言发展起来的编程语言,它在保留C语言所有功能的同时,增加了面向对象编程(OOP)的能力,支持类、封装、继承、多态等特性。C++不仅支持面向对象编程,还...

    华为各轮面试总结 性能算法岗位

    善于引导面试官,比如当面试官问到什么问题不懂的时候,避免连问几个都不懂,可以尝试这么说:我***方面的知识比较匮乏,不是很了解,但是我对***的知识还是比较熟习,我觉得***的知识在我们华为性能与算法工程师...

    天津大学考研面试算法专题(很全面)

    面试中可能会涉及排序算法(如冒泡排序、快速排序、归并排序)、查找算法(如线性查找、二分查找)以及图论中的路径搜索算法(如Dijkstra算法、Floyd算法)。 2. **数据结构**:数据结构是组织和管理数据的方式,...

    达内javaPPT课件+java面试基础复习

    面试复习部分,可能会重点考察以下几个方面: 1. 数据结构与算法:理解常见的数据结构(如栈、队列、链表、树、图)及其操作,以及算法(排序、查找)的时间复杂度分析。 2. 面向对象设计:设计原则、设计模式,例如...

    数据结构重要算法(含排序、查找)期末复习用

    以下是几个典型的查找算法实例: 2. **二叉树的最长路径**:在二叉树中,最长路径是从一个节点到另一个节点的最长路径,路径上的边可以是向左或向右的。给出的代码实现了一个模板函数`BinTree&lt;T&gt;::LongestWay`,它...

    黑马内部复习面试资料

    Java的基础复习主要包括以下几个核心概念: 1. **语法基础**:Java的语法与C++相似,但更简洁。包括基本数据类型(如int、float、boolean等)、变量声明、控制结构(如if-else、for、while循环、switch-case)、...

    中科大_研究生_算法设计与分析_最新期末复习资料算法整理.zip

    在学习算法设计与分析时,以下几个关键知识点是必不可少的: 1. **排序算法**:包括快速排序、归并排序、堆排序、冒泡排序、插入排序和选择排序等。了解它们的时间复杂度和空间复杂度,以及各自的适用场景。 2. **...

    各类IT公司笔试面试题(数据结构算法)收集,很全很实用

    1. 代码实现:例如,实现一个简单的排序算法或者设计一个特定功能的函数。 2. 逻辑分析:比如给出一段代码,让你分析其运行结果或者找出可能存在的问题。 3. 设计模式:考察你对软件设计模式的理解和应用能力。 4. ...

    文档数据结构算法设计笔试面试题100+

    根据给定文件的信息,我们可以提炼出以下几个主要的知识点: ### 1. 文档的主要内容:数据结构与算法 - **数据结构**:是指在计算机科学中用于组织、管理和存储数据的有效方式,使得数据可以被高效地访问和修改。...

    基于C语言中的一些算法和面试题

    在面试中,C语言的题目往往涉及以下几个方面: 1. **基本语法**:指针、数组、结构体、联合体、枚举等基础知识,以及对内存管理的理解,如堆栈和堆的区别。 2. **数据结构**:链表、栈、队列、树(二叉树、AVL树、...

    网络安全面试复习题(附答案).docx

    网络安全面试复习题主要涵盖以下几个核心知识点: 1. 入侵检测系统(IDS):IDS 是一种实时监控网络传输,及时发现可疑活动并发出警告或采取响应措施的安全设备。它的主要特点是积极主动的防御策略,起源于1980年代...

    程序员 面试 宝典 各大公司面试集锦

    面试宝典中的内容可能涵盖以下几个方面: 1. **编程基础**:C/C++、Java、Python等主流编程语言的基本语法,包括变量、数据类型、控制流、函数、类与对象等。 2. **算法与数据结构**:掌握常见的排序算法(如冒泡...

    考试类精品--前端算法面试常考题目解析。.zip

    在前端算法面试中,通常会考察以下几个核心知识点: 1. **数据结构**:数组、链表、栈、队列、哈希表、树(如二叉树、平衡树AVL和红黑树)以及图等。理解并能灵活运用这些数据结构解决实际问题,是基础中的基础。 ...

    CSView是一个互联网面试知识学习和汇总项目,包括面试高频算法、系统设计、计算机网络、操作系统、C++

    1. **面试高频算法**:这包括数据结构(如数组、链表、栈、队列、树、图)和算法(如排序、搜索、动态规划、贪心算法、回溯法)。理解并熟练运用这些算法是程序员面试中的关键部分,它们能够评估你的逻辑思维和问题...

    达内面试题答案

    综合以上信息,我们可以预想这份资源可能包括以下几个方面的知识点: 1. **基础编程语言知识**:如Java、Python、C++等,涵盖了语法、数据结构、算法等基础内容。 2. **Web开发**:HTML、CSS、JavaScript,以及前端...

    最新的大厂面试资料全面

    从标签来看,我们可以推测这份压缩包包含了以下几个方面的内容: 1. **资源达人分享计划**:这可能意味着这些面试题是由有经验的IT从业者或专家精心整理的,他们通过分享自己的经验和知识,帮助其他人提升面试准备...

    C/C++程序员面试宝典

    面试中,面试官通常会考察以下几个方面的知识: 1. **基础语法**:包括变量、数据类型、运算符、流程控制(如if-else、switch-case、循环)、函数、指针等。对于指针,理解其工作原理、内存管理以及如何使用指针...

Global site tag (gtag.js) - Google Analytics