直接选择排序的思路很简答,需要经过n-1趟比较。
优点:算法简答,容易实现。
缺点:每趟只能确定一个元素,n个数组需要进行n-1趟比较。
package com.syc.crazejava.chapter12;
public class DataWrap implements Comparable<DataWrap> {
int data;
String flag;
public DataWrap(int data,String flag){
this.data = data;
this.flag = flag;
}
public String toString(){
return data + flag;
}
public int compareTo(DataWrap dw) {
return this.data > dw.data ? 1 : (this.data == dw.data ? 0 : -1);
}
}
package com.syc.crazejava.chapter12;
public class SelectSort {
public static void selectSort(DataWrap[] data){
System.out.println("开始排序");
int arrayLength = data.length;
for(int i=0;i<arrayLength-1;i++){
// int minIndex = i;
for(int j=i+1;j<arrayLength;j++){
if(data[i].compareTo(data[j])>0){
DataWrap tmp = data[i];
data[i] = data[j];
data[j] = tmp;
}
}
}
System.out.println(java.util.Arrays.toString(data));
}
public static void main(String[] args){
DataWrap[] data = {
new DataWrap(21,""),
new DataWrap(30,""),
new DataWrap(49,""),
new DataWrap(30,""),
new DataWrap(16,""),
new DataWrap(9,"")
};
System.out.println("排序之前:\n" + java.util.Arrays.toString(data));
selectSort(data);
System.out.println("排序之後:\n" + java.util.Arrays.toString(data));
}
}
从上面直接选择排序算法可以看出,直接选择排序算法的关键就是n-1趟比较,每趟比较的目的就是选择出本趟比较中最小的数据,并将该数据放在本趟比较的第1位。从这里的描述不难发现,其实直接选择排序的每趟比较最多只需交换一次就够:只要找到本趟比较中最小的数据,然后拿它和本趟比较中第1位的数据交换。
package com.syc.crazejava.chapter12;
public class SelectSort2 {
public static void selectSort(DataWrap[] data){
System.out.println("开始排序");
int arrayLength = data.length;
for(int i=0;i<arrayLength -1;i++){
int minIndex = i;
for(int j=i+1;j<arrayLength;j++){
if(data[minIndex].compareTo(data[j])>0){
minIndex = j;
}
}
if(minIndex !=i){
DataWrap tmp = data[i];
data[i] = data[minIndex];
data[minIndex] = tmp;
}
System.out.println(java.util.Arrays.toString(data));
}
}
public static void main(String[] args){
DataWrap[] data = {
new DataWrap(21,""),
new DataWrap(30,""),
new DataWrap(49,""),
new DataWrap(30,""),
new DataWrap(26,""),
new DataWrap(9,"")
};
System.out.println("排序之前:\n" + java.util.Arrays.toString(data));
selectSort(data);
System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
}
}
- 大小: 10 KB
分享到:
相关推荐
"基于Java语言实现的直接选择排序算法.pdf" 本文主要介绍了直接选择排序算法的原理和实现方法,并使用Java语言实现了该算法。文章首先介绍了排序的基本概念和分类,然后详细介绍了直接选择排序算法的基本思想和实现...
本话题主要探讨六种内部排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序以及堆排序。这六种排序算法各有优劣,适用于不同的场景,接下来我们将逐一进行详细阐述。 1. **直接插入排序**: 直接...
实现以下常用的内部排序算法并进行性能比较:"直接插入排序"," 折半插入排序"," 2—路插入排序"," 表插入排序"," 希尔排序"," 起泡排序"," 快速排序"," 简单选择排序"," 树形选择排序"," 堆排序"," 归并排序"," 链式...
希尔排序首先将待排序的元素按增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减少到1时,整个文件恰被分成一组,算法便终止。 6. **归并排序(Merge Sort)** 归并...
排序算法汇总(选择排序、直接插入排序、冒泡排序、希尔排序、快速排序、堆排序) 本资源介绍了六种常用的排序算法:选择排序、直接插入排序、冒泡排序、希尔排序、快速排序和堆排序。下面对每种算法进行详细介绍:...
本文将深入探讨Java编程语言中实现的七种主要排序算法:直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序以及归并排序。每种算法都有其独特性,适用于不同的场景和数据特性。 1. **直接插入排序**:...
本资源提供了七大经典排序算法的实现程序,包括快速排序、冒泡排序、选择排序、归并排序、插入排序、希尔排序和堆排序。下面将逐一详细介绍这些排序算法及其原理。 1. 快速排序:由C.A.R. Hoare提出,是一种采用...
(1) 完成5种常用内部排序算法的演示,5种排序算法为:快速排序,直接插入排序,选择排序,堆排序,希尔排序; (2) 待排序元素为整数,排序序列存储在数据文件中,要求排序元素不少于30个; (3) 演示程序开始,...
直接插入排序、冒泡排序、快速排序、直接选择排序、堆排序和二路归并排序是计算机科学中经典的排序算法,它们在数据处理和算法学习中占有重要地位。这些排序算法各有特点,适用场景不同,下面将逐一详细介绍,并结合...
本文将探讨如何使用这两种语言实现几种基本的排序算法:冒泡排序、选择排序,以及两种全比较排序(并行和串行)。 首先,让我们了解一下排序算法。排序是计算机科学中最基础的操作之一,它涉及到将一组数据按照特定...
这七种算法分别是:冒泡排序、选择排序、直接插入排序、希尔排序、堆排序、归并排序和快速排序。 1. **冒泡排序**: 冒泡排序是最基础的排序算法之一,通过重复遍历待排序序列,比较相邻元素并交换位置来实现排序...
数据结构(c语言版)严蔚敏 吴伟民编著 中直接插入排序、折半排序、shell排序、冒泡排序、快速排序、选择排序、堆排序的实现、归并排序,使用c语言实现
提供五种排序算法的C++实现方法,输入(待排序元素个数、排序码上界(采用随机生成数组方式)),可选择输出(原始数组、排序后数组、原始数组有序度和无序度、排序过程中数据比较次数与数据移动次数、数组中出现...
数据结构---直接插入排序/快速排序/选择排序/冒泡排序(详细实现算法和性能比较)
本篇文章将深入探讨标题和描述中提到的九大排序算法:快速排序、冒泡排序、堆排序、希尔排序、直接插入排序、直接选择排序、基数排序、箱排序和桶排序。 1. **快速排序**:快速排序是一种基于分治策略的排序算法,...
简单选择排序是一种基础且直观的排序算法,虽然效率较低,但对理解排序原理非常有帮助。当我们需要在单链表这种非数组结构上进行排序时,需要对基本的简单选择排序算法进行一些调整。接下来,我们将详细探讨如何在...
在实际应用中,根据数据特性和性能需求,选择合适的排序算法是非常重要的,例如,如果数据量较小且近乎有序,直接插入排序可能是不错的选择;而对于大数据集,堆排序和快速排序通常更高效。在掌握这些基本算法后,还...
本项目旨在实现并比较六种经典的排序算法——直接插入排序、折半插入排序、起泡排序、简单选择排序、堆排序以及2-路归并排序,使用C语言编程。为了全面评估这些算法,我们将在一组随机生成的30000个整数上运行它们,...
本文主要探讨四种基本的排序算法:插入排序、交换排序、选择排序和归并排序,这些都是内部排序的主要方法。 1. **插入排序**: - 直接插入排序是最基础的排序算法之一,它的工作原理类似于人们手动整理扑克牌。...