直接选择排序

内部排序算法系列---直接选择排序

拟墨画扇 提交于 2020-04-06 20:06:17
常见的内部排序分类: 我们来看下直接选择排序,其实思路很简单,就是从第一个数字开始依次跟后面的数字进行比对来交互位置,每一趟可以找出一个最小的;但是需要经过n-1趟比较。直接上程序吧: import java.util.Arrays; /** * @author stefanie zhao * @date 2014-9-25 下午04:09:48 */ public class SelectSort { public static void selectSort(DataWrap[] data){ System.out.println("begin sort......"); int arrayLength = data.length; for(int i = 0 ; i <= arrayLength - 1 ; 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(Arrays.toString(data)); } } public static void main(String[] args) {

java算法(一) 直接选择排序

邮差的信 提交于 2020-03-17 17:40:22
一、基本概念 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置(注:要把最大最小的元素和起始的元素交换), 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 二、算法特点 是否稳定:  false 平均时间复杂度:O(n^2) 最差时间复杂度:O(n^2) 最优时间复杂度:O(n^2) package com.jiafuwei.java; /** * java 选择排序 * @author jfw * */ public class SelectionSort { public static void main(String[] args) { int [] collections = {36,23,56,789,342,456,34,7,234,4578,32}; SelectionSort selectionSort = new SelectionSort(); selectionSort.sort(collections); for (int i = 0; i < collections.length; i++) { System.out.print(collections[i]+" "); } } public void sort(int [] data) { for(int k=0;k<data

选择排序法

陌路散爱 提交于 2020-02-13 22:40:48
算法原理 直接 选择 排序 的 基本 思想: n 个 记录 的 直接 选择 排序 可 经过 n- 1 趟 直接 选择 排序 得到 有序 结果。 (1) 初始 状态: 无序 区 为 A[ 1... n], 有序 区 为 空。 (2) 第 1 趟 排序: 在 无序 区 A[ 1... n] 中选 出 最小 的 记录 A[ k], 将它 与 无序 区 的 第 1 个 记录 A[ 1] 交换, 使 A[ 1… 1] 和 A[ 2... n] 分别 变为 记录 个数 增加 1 的 新 有序 区 和 记录 个数 减少 1 的 新 无序 区。 (3) 第 i 趟 排序: 第 i 趟 排序 开始时, 当前 有序 区 和 无序 区分 别为 A[ 1… i- 1] 和 A[ i.. n]( 1 ≤ i ≤ n- 1)。 该 趟 排序 从 当前 无序 区 中 选出 关键字 最小 的 记录 A[ k], 将它 与 无序 区 的 第 1 个 记录 A[ i] 交换, 使 A[ 1… i] 和 A[ i+ 1... n] 分别 变为 记录 个数 增加 1 的 新 有序 区 和 记录 个数 减少 1 的 新 无序 区。 这样, n 个 记录 的 文件 的 直接 选择 排序 可 经过 n- 1 趟 直接 选择 排序 得到 有序 结果。 直接 选择 排序 是 不稳 定的。 算法草稿,三角列表示本轮排序后的结果

直接排序(选择排序)、冒泡排序、二分法排序

六眼飞鱼酱① 提交于 2020-02-04 23:55:48
1、直接排序(选择排序) 将数组中的元素分别与后边的元素进行比较,每次将最大值(最小值)放到前边(后边),直到所有元素都进行过比较后,得到降序(升序)排列后的数组。 直接上代码: // 选择排序法(直接排序法) public int[] straightOrderSort(int[] arr) { // 外层循环控制比较的轮数,每轮可以找到一个最小值 for (int i = 0; i < arr.length - 1; i++) { //内层循环控制每轮比较的次数 for (int j = i + 1; j < arr.length; j++) { if (arr[i] > arr[j]) { //小元素放前边,大元素放后边,得到升序排序后的数组 int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } return arr; } 2、冒泡排序 将相邻两个元素进行比较,符合条件的进行位置交换,每轮找出一个最大值(最小值),且这个元素不再参与下一轮的比较,直到完成排序。 // 冒泡排序法 public int[] bubbleSort(int[] arr) { //外层循环控制比较的轮数,每次得到一个最大数字 for (int i = 0; i < arr.length - 1; i++) { /

直接选择排序基本思想和算法代码实现

限于喜欢 提交于 2020-01-26 04:43:48
直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:第一次从R[0] R[n-1]中选取最小值,与R[0]交换,第二次从R[1] R[n-1]中选取最小值,与R[1]交换,…,第i次从R[i-1] R[n-1]中选取最小值,与R[i-1]交换,…,第n-1次从R[n-2] R[n-1]中选取最小值,与R[n-2]交换,总共通过n-1次,得到一个按排序码从小到大排列的有序序列。 代码实现(java) public void selectSortselSort(int a[]){ for (int i = 0; i < a.length; i++) { int tmp = a[i];//存储遍历时最小的值 int flag = i;//存储最小值的位置 for(int j = i+1;j<a.length;j++){ if(a[j]<tmp){ //找到更小的值,将值和位置存储起来 tmp = a[j]; flag = j; } } int tmp2 = a[i];//临时保存a[i]的值,用于交换值得位置 a[i] = tmp; a[flag] = tmp2; } } 在直接选择排序中,共需要进行n-1次选择和交换,每次选择需要进行 n-i 次比较 (1<=i<=n-1),而每次交换最多需要3次移动,因此,总的比较次数C=(n*n

选择排序(C语言)

无人久伴 提交于 2019-12-23 21:44:52
选择排序(C语言) 直接选择排序 算法思想 程序 数组实现 链表实现 二元选择排序 算法思想 程序 直接选择排序 算法思想 见: 3. 选择排序—简单选择排序(Simple Selection Sort) 程序 数组实现 void swap ( int * s1 , int * s2 ) { int tem ; tem = * s2 ; * s2 = * s1 ; * s1 = tem ; } void SelectSort ( int a [ ] , int n ) { int i , j , max ; for ( i = 0 ; i < n - 1 ; i ++ ) { max = i ; for ( j = i + 1 ; j < n ; j ++ ) if ( a [ j ] > a [ max ] ) max = j ; //记录大的下标 swap ( & a [ max ] , & a [ i ] ) ; } } 时间复杂度: O ( N 2 ) O(N^2) O ( N 2 ) 链表实现 struct node ; typedef struct node * ptrtonode ; typedef ptrtonode list ; typedef ptrtonode position ; struct node { int data ; ptrtonode next

直接选择排序(Straight Selection Sort)

假如想象 提交于 2019-12-13 17:49:59
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 1、定义 选择排序(Selection Sort)的基本思想是:每一趟从待排序的记录中选出关键字最小的记录,顺序放在已排好序的子文件的最后,直到全部记录排序完毕。 常用的选择排序方法有直接选择排序和堆排序。 2、基本思想 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: ① 初始状态:无序区为R[1..n],有序区为空。 ② 第1趟排序 在无序区R[1..n]中选出关键字最小的记录R[k],将它与无序区的第1个记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。 …… ③ 第i趟排序 第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R[i..n](1≤i≤n-1)。该趟排序从当前无序区中选出关键字最小的记录R[k],将它与无序区的第1个记录R[i]交换,使R[1..i]和R[i+1..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。 这样,n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果。 3、算法描述 直接选择排序的具体算法如下:   void SelectSort(SeqList R)  { int i,j,k; for(i=1;i<n;i++){//做第i趟排序(1≤i≤n