`

排序算法集合

 
阅读更多
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] + " ");
}
}

分享到:
评论

相关推荐

    易语言数组排序算法集合

    易语言数组排序算法集合源码,数组排序算法集合,排序程序,冒泡排序,改冒泡法,双向泡排序,双响泡排序,直接插入排序,地精排序,地精排序2,地精排序3,二分排序,选择排序,梳子排序,希尔排序,快速排序

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

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

    排序算法集合 包括(插入排序,选择排序,快速排序,堆排序)

    排序算法集合: 直接插入排序 折半插入排序 2-路插入排序 表插入排序法 希尔排序 快速排序 简单的选择排序 树形选择排序

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

    该排序算法集合包括插入排序、希尔排序、起泡排序、快速排序、选择排序、堆排序,除此之外还实现了各种排序算法效率的比较

    经典排序算法集合 (推荐啊)

    经典排序算法集合 也是网上搜来的, 在这里与大家分享

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

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

    JAVA排序算法集合

    1.插入排序(直接插入排序、折半插入排序、希尔排序); 2.交换排序(冒泡泡排序、快速排序); 3.选择排序(直接选择排序、堆排序); 4.归并排序; 5.基数排序

    多种排序算法集合

    代码包括多种排序算法,折半插入、冒泡排序、快速排序、简单选择排序、堆排序、归并排序等

    java排序算法集合

    java 排序算法 选择 冒泡 插入 等等等

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

    解压后都是针对学生成绩排序,包含了数据结构与算法里面常见的所有排序算法,解压后请先阅读readme文件,里面的代码可直接运行,对于研究排序算法的初学者很有帮助。

    排序算法集合类

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

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

    排序是一个难点,里面包含了堆排序等等有关排序的算法,希望对大家有所帮助...this is a good resource and way to study sort the number that what you wanted,please come and download it.

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

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

    java中各种排序算法集合

    本内容中包含了java中各种排序算法的实现以及思想的解释,本内容仅供学习参考使用,请需要的朋友自行下载。

    8个简单的排序算法集合

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

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

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

    c++ 数据结构 各类 排序算法 集合

    A、插入 B、冒泡 C、选择 D、快速 E、归并 F、堆排 G、计数 H、基数 I、希尔 共9种排序算法 本人课程设计作业,保证能用

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

    排序算法大集合,包括各种算法,文档中包括各种算法的详细说明和例子。并比较他们的性能。

Global site tag (gtag.js) - Google Analytics