前段时间面试时复习的几个排序算法。
一、冒泡排序:
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();
}
}
分享到:
相关推荐
一个堆排序算法 c++写的 逻辑相同 可自行 改为java 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一个堆排序算法 c++ 写一...
基于C++/C实现 7种面试管经常问到的排序算法
IT常见的面试题目,各种排序算法的Java代码实现,内部有代码和详细的注释信息。
各种查找与排序算法,笔试面试过程中经常遇到的题目。。
几个排序算法的C++实现
几个算法导论上的排序算法
合并排序算法和快速排序算法采用了采用分治法、递归的方法,将时间复杂度降为O(nlogn)。在本次实验中将数据量提到5万的时候,该类算法运行时间仍在几毫秒左右,而上面的3种算法运行时间已经到达十几秒左右,效率...
C#排序算法大全 冒泡排序、选择排序、插入排序、希尔排序
最快的排序算法 C语言最简单的排序算法冒泡排序并返回排序前索引序号,排序算法数据结构
java实现的常用的几种基本排序算法,插入、交换、选择、归并
C语言实现的几种排序算法的整理,完整代码
该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 # sort.insertionSort() #插入排序 # sort.Selectionsort1() #选择排序 # sort.heapSort() #堆排序 # sort.countSort() ...
7种排序算法程序汇总 冒泡排序 选择排序 插入排序 希排序尔 快速排序 二叉排序树 堆排序
国庆在家没事做,写了下几个排序算法,int转char char转int,经常在面试中会遇到,给大家提供参考
桶式排序法桶式排序法桶式排序法桶式排序法
js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js排序算法动态显示js...
常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结常用排序算法总结
几种排序算法的代码实现。c语言版的。排序算法 希尔排序 快速排序 堆排序 归并排序 计数排序
排序算法归档排序算法归档排序算法归档排序算法归档排序算法归档排序算法归档排序算法归档排序算法归档排序算法归档排序算法归档排序算法归档排序算法归档排序算法归档排序算法归档