`

排序算法集合

 
阅读更多
package sort;

import java.util.Random;

public class SortTest {

/**
* 随即生成数组的方法 Random
*
* @param args
*/
public int[] createArray() {
Random random = new Random();
int[] array = new int[1000];
for (int i = 0; i < 1000; i++) {
array[i] = random.nextInt(100) - random.nextInt(100);// 生成两个随机数相减,保证生成的数中有负数
}
System.out.println("==========原始序列==========");
// printArray(array);
return array;
}

/**
* 打印数组的值
*
* @param array
*/
public void printArray(int[] array) {
for (int i : array) {
System.out.println(i);
}
}


/**
* 交换数组中指定的两元素的位置
*
* @param data
* @param x
* @param y
*/
private void swap(int[] data, int x, int y) {
int temp = data[x];
data[x] = data[y];
data[y] = temp;
}

/**

* 直接选择排序 方法:每一趟从待排序的数据元素中选出最小(或最大)的一个元素, 顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

*
* @param args
*/
public void selectSort(int[] array, String sortType) {
if (sortType.equals("asc")) { // 正排序,从小到大
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) { //子循环中每一次i值不变,每一次第一个i值都和剩下的所有值比较
if (array[i] > array[j])
swap(array, i, j);
}
}
} else if (sortType.equals("desc")) { // 倒排序,从大到小
for (int i = 0; i < array.length - 1; i++) {
for (int j = i + 1; j < array.length; j++) {
if (array[i] < array[j])
swap(array, i, j);
}
}
}
printArray(array);
}

/**
* 冒泡排序 方法:相邻两元素进行比较,如有需要则进行交换,每完成一次循环就将最大元素排在最后(如从小到大排序),下一次循环是将其他的数进行类似操作。
*
* @param args
*/
public void bubbleSort(int[] array, String sortType) {
if (sortType.equals("asc")) { // 正排序,从小排到大
// 比较的轮数
for (int i = 1; i < array.length; i++) {
// 将相邻两个数进行比较,较大的数往后冒泡
for (int j = 0; j < array.length - i; j++) {
if (array[j] > array[j + 1]) {
// 交换相邻两个数
swap(array, j, j + 1);
}
}
}
} else if (sortType.equals("desc")) { // 倒排序,从大排到小
// 比较的轮数
for (int i = 1; i < array.length; i++) {
// 将相邻两个数进行比较,较大的数往后冒泡
for (int j = 0; j < array.length - i; j++) {
if (array[j] < array[j + 1]) {
// 交换相邻两个数
swap(array, j, j + 1);
}
}
}
}
}

/**
* 插入排序 方法:将一个记录插入到已排好序的有序表(有可能是空表)中,从而得到一个新的记录数增1的有序表。
*
* @param args
*/
public void insertSort(int[] data, String sortType) {
if (sortType.equals("asc")) { // 正排序,从小排到大
// 比较的轮数
for (int i = 1; i < data.length; i++) {
// 保证前i+1个数排好序,保证i前面的数都是排好序的
for (int j = 0; j < i; j++) {
if (data[j] > data[i]) {
// 交换在位置j和i两个数
swap(data, i, j);
}
}
}
} else if (sortType.equals("desc")) { // 倒排序,从大排到小
// 比较的轮数
for (int i = 1; i < data.length; i++) {
// 保证前i+1个数排好序
for (int j = 0; j < i; j++) {
if (data[j] < data[i]) {
// 交换在位置j和i两个数
swap(data, i, j);
}
}
}
} else {
System.out.println("您输入的排序类型错误!");
}
printArray(data);// 输出插入排序后的数组值
}

public static void main(String[] args) {
SortTest sort = new SortTest();
long start1 = System.currentTimeMillis();
sort.selectSort(sort.createArray(), "desc");
long end1 = System.currentTimeMillis();
System.out.println("直接选择排序用时:" + (end1 - start1) + "毫秒");
start1 = System.currentTimeMillis();
sort.bubbleSort(sort.createArray(), "desc");
end1 = System.currentTimeMillis();
System.out.println("冒泡用时:" + (end1 - start1) + "毫秒");

}

}

--------------------------------------------------------------------------------------------

上面的选择排序法好像有问题,下面贴一个正确的,请大家帮忙看看是否上面的有问题。这个选择排序总是混。上面的选择排序看起来类似于插入排序。

// 选择排序(从小到大)
public static void selectSort(int[] arr) {
// 进行交换数据时用到的变量
int temp = 0;
// 外层循环的作用是控制排序的趟数
for (int i = 0; i < arr.length; i++) {
// 首选认为数组中的第一个数是最大的数
int max = arr[i];
// 记录最大数的下标,用于能快速的找到其位置
int maxIndex = i;
// 内层循环用于找出最大(或最小)的数的位置
for (int j = i; j < arr.length; j++) {
if (max > arr[j]) {
max = arr[j];
maxIndex = j;
}
}
// 退出内层循环后,说明已经找到最大(或最小)的数的下标,把找到的数与数组的第一个(相应)位置的数交换
temp = arr[i];
arr[i] = max;
arr[maxIndex] = temp;
}
// 输出排序结果
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
}

分享到:
评论

相关推荐

    易语言数组排序算法集合

    本资源“易语言数组排序算法集合”提供了多种常见的排序算法的源代码实现,对于学习易语言以及算法理解都有极大的帮助。下面将详细介绍其中提及的几种排序算法。 1. **冒泡排序**: 冒泡排序是最基础的排序算法之...

    多种排序算法集合

    这个名为“多种排序算法集合”的资源包含了一系列常见的排序算法实现,用C++编程语言编写。接下来,我们将深入探讨这些排序算法的工作原理、优缺点以及适用场景。 1. **折半插入排序(Binary Insertion Sort)**: ...

    C语言学生成绩排序算法集合

    "C语言学生成绩排序算法集合"这个资源提供了多种排序算法的实现,对于初学者来说,是理解并掌握这些算法的宝贵资料。下面将详细介绍其中可能包含的一些主要排序算法。 1. 冒泡排序(Bubble Sort):是最基础的排序...

    数据结构PPT----排序算法集合(sort )

    在数据结构PPT——排序算法集合中,重点介绍了几种经典的排序方法,包括直接插入排序、折半插入排序和希尔排序。这些方法在不同的应用场景下展现出了各自的优缺点,是我们掌握排序技术的必经之路。 直接插入排序因...

    易语言源码易语言数组排序算法集合源码.rar

    易语言源码易语言数组排序算法集合源码.rar 易语言源码易语言数组排序算法集合源码.rar 易语言源码易语言数组排序算法集合源码.rar 易语言源码易语言数组排序算法集合源码.rar 易语言源码易语言数组排序算法集合...

    JAVA排序算法集合

    根据给定文件的信息,本文将详细介绍Java中的五种主要排序算法:插入排序、交换排序、选择排序、归并排序以及基数排序。每种排序方法都包括了不同的变体和技术细节。 ### 一、插入排序 #### 1. 直接插入排序 直接...

    C++大作业 排序算法集合

    随机产生10000个浮点数,保存到a.txt文件中,再读取到内存中并分别用简单选择排序、冒泡排序、快速排序、希尔排序、归并排序、堆排序算法进行排序,显示排序过的数列的第1、10、100、1000、10000的具体数字和每个...

    使用c++实现的各种排序算法集合

    在IT领域,排序算法是计算机科学中的基础且重要的部分,特别是在数据处理和程序设计中。本文将详细讨论在C++中实现的几种经典排序算法,包括它们的工作原理、效率比较以及如何在实际编程中应用。 首先,我们来看...

    java中各种排序算法集合

    在Java编程语言中,排序算法是数据结构与算法领域中的重要组成部分。这些算法用于将一组数据按照特定顺序排列,常见的有升序或降序。以下是对压缩包中提及的几种排序算法的详细解释: 1. **希尔排序(Shell Sort)**...

    java实现的经典排序算法集合

    个人总结的java实现的经典排序算法,包括快速排序和归并排序等等,适合新手学习

    排序算法集合类

    经典算法集合类文件,可以用于学习,复习,研究,练习等等

    8个简单的排序算法集合

    八个常用的内部排序算法 冒泡排序,归并排序,快速排序,希尔排序,插入排序等。

    sortingjs:with用JavaScript实现的排序算法集合

    使用JavaScript实现的排序算法集合。 到目前为止,我们已经在此介绍了 , , 算法。 有关更多排序算法,请继续关注! 运行此应用程序 该项目是使用commonjs约定编写的,即在nodejs环境中编写的,因此可以使用以下...

    排序算法大集合,包括各种算法

    这个压缩包文件“排序算法大集合”显然包含了多种排序算法的详细说明和实例,旨在帮助我们理解和掌握这些算法的运作原理以及它们在不同情况下的性能差异。 1. **冒泡排序**:这是一种简单的排序算法,通过重复遍历...

    易语言数组排序算法集合源码-易语言

    这个"易语言数组排序算法集合源码"是针对易语言编程者的一个进阶教程资源,包含了各种数组排序算法的实现,对于学习和理解算法有着重要的作用。 数组排序是计算机科学中的基本问题,无论是在数据处理、数据分析还是...

    java代码-排序算法集合

    在这个"java代码-排序算法集合"中,我们很可能会找到一系列经典的排序算法实现,比如冒泡排序、插入排序、选择排序、快速排序、归并排序以及堆排序等。 1. **冒泡排序**:这是一种简单的排序算法,通过重复遍历待...

    C++实现各种排序算法.zip

    总之,这个C++实现的排序算法集合是一个宝贵的教育资源,无论是初学者还是经验丰富的开发者,都可以从中受益,提升自己的编程和算法能力。通过亲手实践,我们可以更好地掌握这些算法,为日后的软件开发工作打下坚实...

    排序算法汇编(常见排序算法的集合)

    排序算法作为实现数据有序化的核心技术,一直以来都是计算机科学的研究热点。为了更好地理解和应用这些算法,本文将详细探讨常见的内部排序方法,并对其进行分类和分析。 首先,根据排序过程中资料所在媒介物的区分...

Global site tag (gtag.js) - Google Analytics