算法-选择排序这两种有什么不同,注意粗体部分

问题描述

选择排序这两种有什么不同,注意粗体部分
public static void sort(Comparable[] a)
{ // 将a[] 按升序排列
int N = a. length; // 数组长度
for (i nt i = 0; i < N; i ++)
{ // 将a[i ] 和a[i +1. . N] 中最小的元素交换
int min = i ; // 最小元素的索引
for (int j = i +1; j < N; j ++)
if (l ess(a[j ] a[mi n] ) ) mi n = j ;
exch(a i mi n) ;
}
}
// l ess() 、 exch() 、 i sSorted() 和mai n() 方法见“排序算法类模板”
public static void selectionSort(int[] a)
{
int len = a.length;
for (int i=0; i<**len-1**; i++)
{
int min = i;
for (int j=i+1; j {
if (a[min] > a[j])
min = j;
}
int t = a[min];
a[min] = a[i];
a[i] = t;
}
}

解决方案

for (int j=i+1; j {
if (a[min] > a[j])
min = j;
}
这语句写得有问题,重新截个图上传上来

解决方案二:
public static void selectionSort(int[] a)
{
int len = a.length;
for (int i=0; i<**len-1**; i++)
{
int min = i;
for (int j=i+1; j {
if (a[min] > a[j])
min = j;
}
int t = a[min];
a[min] = a[i];
a[i] = t;
}
}
第二种

解决方案三:

解决方案四:

解决方案五:
这两方法是一样的,都说明了选择排序的思想,也都能实现,但第二种方法selectionSort(int[] a)更能说明算法思想,比较n个数所需要遍历的次数为n-1(比如说4和3两数比较,只需一次就可比较出来),所以遍历的范围就是0~n-2,那么外部for循环应该是i < n-1,内部循环应该是j < n,因为选择排序是从所需比较的下一个数开始寻找最小值,遍历范围为(i+1)~n-1;第一种方法外部循环使用的是i < N 是因为当i=n-1时,内部循环j的值为n,n< n不成立,内部循环也会退出,但多了一次判断,而第二种方法就不会多一次判断了,所以我觉得第二种方法更好。

解决方案六:
没区别 下面的循环少执行一次判断 length-1 这个值没比较进入小循环

但是都是 o(n^2)的复杂度 这个是已很low的解决方案 归并排序 堆排序 快速排序 都是 o(nlogn)的时间界, 这些排序算法 才值得看

时间: 2025-01-29 16:46:40

算法-选择排序这两种有什么不同,注意粗体部分的相关文章

算法 选择排序-请教一个选择排序的算法问题

问题描述 请教一个选择排序的算法问题 你好, 我刚刚开始接触JAVA, 问一个选择排序的问题. private static void SelectionSort (int[] arr) { for(int i=0; i for(int j=i+1;j if (arr[i] > arr[j]) { int m; m = arr[i]; arr[i] = arr[j]; arr[j] = m; } } } } 这个方法正确,但是交换次数多了,所以我想改进一下. private static voi

算法 选择排序-C语言关于选择排序法的问题

问题描述 C语言关于选择排序法的问题 #include"stdio.h" #define?N?10 int?main()? { int?i,j,min,tem,a[N];? for(i=0;i ????scanf("%d",&a[i]); for(i=0;i { ????min=i;? ????for(j=i+1;j ?????????if(a[min]>a[j])? ?????????min=j;? ????tem=a[i];? ????a[i]=a

mysql数据库自增id重新从1排序的两种方法

使用mysql时,通常表中会有一个自增的id字段,但当我们想将表中的数据清空重新添加数据时,希望id重新从1开始计数,用以下两种方法均可: 通常的设置自增字段的方法: 创建表格时添加: create table table1(id int auto_increment primary key,...) 创建表格后添加: alter table table1 add id int auto_increment primary key 自增字段,一定要设置为primary key. 例子 alter

c/c++ 数据结构和算法-选择排序/冒泡排序

冒泡排序 #include <stdio.h> void BubbleSort(int *a,int n);   int main(void) {     int k;     int a[10]={2,4,6,8,0,1,3,5,7,9};     for(k=0;k<10;k++)     {       if(k==9)           printf("%d\n",a[k]);       else           printf("%d,&qu

Mysql查询指定某字段顺序排序的两种方法

Mysql查询按照某字段指定顺序排序的两个方法,FIELD和substring_index.  代码如下 复制代码 SELECT * FROM documents WHERE id IN (5,3,6,1) ORDER BY FIELD(id,5,3,6,1); 或者:  代码如下 复制代码 SELECT * FROM documents WHERE id IN (5,3,6,1) ORDER BY substring_index((id,5,3,6,1),id,1);

Java对List进行排序的两种实现方法_java

前言 Java.util包中的List接口继承了Collection接口,用来存放对象集合,所以对这些对象进行排序的时候,要么让对象类自己实现同类对象的比较,要么借助比较器进行比较排序. 学生实体类,包含姓名和年龄属性,比较时先按姓名升序排序,如果姓名相同则按年龄升序排序. 第一种:实体类自己实现比较 (实现comparable接口:public interface Comparable<T> ,里面就一个方法声明:public int compareTo(T o); ) 示例代码: publ

Thinkphp 无法使用-)order() 排序的两种解决办法!

使用ThinkPHP,却发现无法使用->order($order)来排序. $order = " info.date2 desc "; 很遗憾的是这样写结果order却变成了 order by date2 limit ... desc不见了. 解决办法一: $order 里面两边不能有任何空格,$order = "info.date2 desc";(正确).$order = " info.date2 desc";(错误!) 解决办法二: 打

堆排序算法(选择排序改进)_C 语言

首先要理解堆的含义:要么所有节点都不大于其子孩子节点数据,要么都不小于其子孩子节点数据 堆排序的核心思想:就是要满足所有节点都满足上面两点,如何完成,看下面 堆排序的步骤: 1.首先要建成一个大顶堆或者小顶堆,在建的过程中其实就是调整节点的位置,首先要从最后最后一个节点的母亲节点开始,按照堆的含义调整.为什么不是最后一个或者其他?因为要保证完整性和不必要性,所以只需从最后一个的母亲节点开始即可(下面的堆默认存在顺序结构,从索引0开始的,所以有些二叉树的特性请查阅二叉树),直至索引节点为0的节点.

选择目录的两种方法

在我们的应用程序中经常需让用户选择目录,如杀毒软件中用户选择处理目录等.这就涉及目录的选择,我们可使用如下方法之一让用户选择目录: 1.使用SHBrowseForFolder和SHGetPathFromIDList函数 函数原形申明如下: WINSHELLAPI LPITEMIDLIST WINAPI SHBrowseForFolder(LPBROWSEINFO lpbi); WINSHELLAPI BOOL WINAPI SHGetPathFromIDList(LPCITEMIDLIST pi