简单选择排序

常用的排序算法(一)

萝らか妹 提交于 2020-03-02 04:38:22
Date: 2016-02-14 #####排序算法的学习 #### 冒泡排序 时间复杂度:当顺序为正序的时候,为最好状态时间复杂度为O(N),平均时间复杂的为O(N^2) 因为没有创建新的存储结构所以空间复杂度为O(1) 冒泡排序是一种稳定的排序算法 #include <stdio.h> void Bubble_sort(int A[],int n); void Bubble_sort(int A[],int n){ int i,j,temp; for(i= 0 ;i < n - 1 ;i++){ for(j = 0;j< n -1 - i;j++){ if(A[j] > A[j+1]){ temp = A[j+1]; A[j+1] = A[j]; A[j] = temp; } } } } int main(int argc, const char * argv[]) { int A[7]={3,1,2,4,6,8,1}; Bubble_sort(A, 7); for(int i =0; i < 7;i++){ printf("%d",A[i]); } } ####改进的冒泡排序 使用冒泡排序对N个数据进行排序,一共需要进行n-1次比较,本来是正常顺序的数据也需要进行n-1次排序,所以当判断所有的数据为有序的时候不在进行排序直接跳出循环, void Bubble_sort(int

选择排序_简单选择排序

一世执手 提交于 2020-02-11 03:33:04
程序代码:   void SelectSort(Elem R[],int n)   {     for(i = 1;i < n;i++)     {       //选择第i小的记录,并交换到位       min = R[i];       for(j = i;j <= n;j++)         if(R[j] < min)           min = R[j];       if(i != j)         swap(s[i],s[j]);     }   } 时间复杂度: 比较次数(n-1)+(n-2)+---+1 = n(n-1)/2;       移动次数最小值为0,最大值为3(n-1)。 稳定性: 不稳定。 来源: https://www.cnblogs.com/maomaohhmm/archive/2012/09/13/2683855.html

排序算法--简单选择排序

拜拜、爱过 提交于 2020-02-11 03:26:26
# 选择排序 ##本小节知识点: 1. 【了解】选择排序 2. 【掌握】选择排序的基本思想 3. 【了解】练习 --- ##1.选择排序 - 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小元 素,然后放到排序序列末尾。以此类推,直到所有元素均排序完毕。 --- ##2.选择排序的基本思想 - 第一趟排序在所有待排序的n个记录中选出关键字最小的记录,将它与数据表中的第一个记录交换位置,使关键字最小的记录处于数据表的最前端;第二趟在剩下的n-1个记录中再选出关键字最 小的记录,将其与数据表中的第二个记录交换位置,使关键字次小的记录处于数据表的第二个位置;重复这样的操作,依次选出数据表中关键字第三小、第四小...的元素,将它们分别换到数据表的第三、第四...个位置上。排序共进行n-1趟,最终可实现数据表的升序排列。 - 示例 --- ##3.练习 - 输入一组无序数据,使用选择排序法进行排序,并输出。 --- 1 // main.c 2 // 选择排序 3 4 #include <stdio.h> 5 //交换算法 6 //打印输出数组的功能 7 void printArray(int array[],int length) 8 { 9 for (int

排序算法

社会主义新天地 提交于 2020-02-08 05:13:18
排序算法 文章目录 排序算法 1.数据结构定义 2.冒泡排序 3.冒泡排序的改进 4.简单选择排序 5.直接插入排序 6.希尔排序(相当于直接插入排序的升级,先搞懂插入排序) 7.堆排序(相当于简单选择排序的升级) 8.归并排序 9.快速排序(冒泡排序的升级) 参考 1.数据结构定义 # define MAXSIZE 10000 /* 用于要排序数组个数最大值,可根据需要修改 */ typedef struct { int r [ MAXSIZE + 1 ] ; /* 用于存储要排序数组,r[0]用作哨兵或临时变量 */ int length ; /* 用于记录顺序表的长度 */ } SqList ; /* 交换L中数组r的下标为i和j的值 */ void swap ( SqList * L , int i , int j ) { int temp = L -> r [ i ] ; L -> r [ i ] = L -> r [ j ] ; L -> r [ j ] = temp ; } 2.冒泡排序 平均时间复杂度:O(n2) 从后往前依次比较相邻的两个数,如果后面的数比较小就交换位置,这样的话每循环一次就会有一个最小值被换到最前面了,然后再依次把其他的数冒上去。 go语言实现: // BubbleSort 冒泡排序 func BubbleSort ( array [ ] int

数据结构简单选择排序

眉间皱痕 提交于 2020-01-31 03:26:11
简单选择排序 设有一组初始关键字序列为(24,35,12,27,18,26),则第3趟简单选择排序结束后的结果。 参考答案是(12,18,24,27,35,26) 但我觉得是(12,18,24,35,27,26) 请问哪个答案才是对的? 我个人觉得参考答案是错的,正确答案是(12,18,24,35,27,26) 参考答案 参考答案给的是: 第1趟排序结果为:12 35 24 27 18 26 第2趟排序结果为:12 18 24 27 35 26 第3趟排序结果为:12 18 24 27 35 26 第4趟排序结果为:12 18 24 26 35 27 第5趟排序结果为:12 18 24 26 27 35 但是我认为 因为: 第1趟排序结果为:12 35 24 27 18 26 第2趟排序结果为:12 18 35 27 24 26 第3趟排序结果为:12 18 24 35 27 26 第4趟排序结果为:12 18 24 26 35 27 第5趟排序结果为:12 18 24 26 27 35 正确答案是(12,18,24,35,27,26) http://www.56.com/u76/v_NjczMjQ5MDU.html 这是选择排序视频,可以打开看一下,网上有很多答案是错的,但是有及时分辨,及时改正,不然很容易误导刚开始学选择排序的同学,就哪这个例子来说,不仅结果是错的

简单选择排序

…衆ロ難τιáo~ 提交于 2020-01-28 11:06:12
/** * 选择排序(Selection sort)是一种简单直观的排序算法。 * 它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置, * 然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。 * 以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。 * @param args */ public static void main(String[] args) { int[] arr={49,38,65,97,76,13,27,49,78,34,12,64,1}; for (int i = 0; i < arr.length - 1; i++) { int min = i; for (int j = i + 1; j < arr.length; j++) { if (arr[min] > arr[j]) { min = j; } } if (min != i) { int tmp = arr[min]; arr[min] = arr[i]; arr[i] = tmp; } } } 来源: CSDN 作者: dalong_bamboo 链接: https://blog.csdn.net/dalong_bamboo/article/details/103800189

【链表】简单选择排序

一曲冷凌霜 提交于 2019-12-26 16:11:51
题目描述: 编写一个算法,在基于单链表表示的待排序关键字序列上进行简单选择排序。 算法思想: 每趟在原始链表中摘下关键字最大的结点,把它插入到结果链表的最前端,由于在原始链表中摘下的关键字越来越小,在结果链表前端的关键字也越小。 因此,最后形成的结果链表中的结点将按关键字非递减的序列有序排列。 //假设单链表不带头结点 void selectSort(LinkList &L) { LinkNode *h=L,*p,*q,*r,*s; L=NULL; while(h!=NULL) { //指针s和r记忆最大结点和其前驱 p=s=h; //p为工作指针,q为其前驱 q=r=NULL; while(p!=NULL) { if(p->data>s->data) { s=p; //指向关键字最大结点 r=q; //指向关键字最大结点的前驱 } q=p; //向下遍历 p=p->next; } if(s==h) //最大结点在原链表前端 h=h->next; else //最大结点在原链表表内 r->next=s->next; s->next=L; //结点s插入到结果链表前端 L=s; } } 来源: CSDN 作者: HHHHOlY 链接: https://blog.csdn.net/frozennet/article/details/103715099

简单排序算法——选择排序

帅比萌擦擦* 提交于 2019-12-08 13:48:35
选择排序: 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 选择排序 是不稳定的排序方法 (比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。 选择排序说白了就是用索引去排序。 话不多说,上代码》》》 package sdx; import java.util.Arrays; public class Main7 { public static void Main7(int a[]){ for(int i=0;i<a.length;i++){ int minindex=i; for(int j=i+1;j<a.length;j++){ if(a[j]<a[minindex]){ minindex=j; } } //这一步结束后,只是为了找到下一个最小值索引, if(i!=minindex){ //找到最小索引,替换i(前题是i与最小索引值minindex不相等,因为相等交换没意义) int temp=a[i]; a[i]=a[minindex]; a[minindex]=temp; } } } public static void main(String[] args) { // TODO

简单排序(冒泡,选择,插入)

匿名 (未验证) 提交于 2019-12-02 23:49:02
冒泡排序经常是我们所接触到的第一个排序算法,因此思想也相对比较简单,它的原理就是按照索引(数组,集合等)顺序从前往后依次与它后面的元素一个一个进行比较。 public static void bubleSort(Integer[] 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; } } } } 选择排序的核心思想就是从待排序的元素中找出最小的元素,我们可以把一组数据分为两部分,左边是排好的,右边是没有排好的。最初的时候,全是没有排序过的,我们此时假定 arr[0] ,也就是 minIndex=0 ,这个位置的元素是最小的。然后我们依次把后面的元素与它进行比较,如果arr[j]比这个 arr[minIndex] 还要小,那么我们就更新 minIndex -> minIndex=j 的值,最后该轮循环结束后如果 i 不等于 minIndex ,我们就进行交换操作。接着i=1,minIndex=i,进行下一轮的操作。 public static void selectSort2(Integer[] arr){ for(int i=0;i<arr

简单选择排序

那年仲夏 提交于 2019-12-01 04:22:27
代码 #include<iostream> #define N 8 #define ElemType int /*简单选择排序*/ void SelectSort(ElemType A[], int n) { int i,j,min,x; for (i = 0; i < n - 1; ++i) { min = i; for (j = i + 1; j < n; j++) if (A[j] < A[min]) min = j; if (min != i) { x = A[i]; A[i] = A[min]; A[min] = x; } } } /*输出数组*/ void OutPrint(int A[]) { int i; for (i = 0; i < N; i++) { printf("%d ", A[i]); } } int main() { int A[N] = {48, 62, 35, 77, 55,14,35,98 }; printf("排序前数组\n"); OutPrint(A); SelectSort(A, N - 1); printf("\n排序后数组\n"); OutPrint(A); system("pause"); return 0; } 来源: https://www.cnblogs.com/brainstorm-yc/p/11653584.html