选择排序优化算法

<h2><span style="font-size:18px;">选择优化一:</span></h2><span style="font-size:18px;">
</span>
<span style="font-size:18px;">#include<stdio.h>
#define N 10
int main(){
   int a[N],max,k,temp,j;
   for(int i=0;i<N;i++)
   {
       scanf("%d",&a[i]);
   }
   for(i=0;i<N;i++)
   {
	   max=i;
       for(j=i+1;j<N;j++)
	   {
		   if(a[j]>a[max])
		   {
		       max=j;
		   }
	   }
	   if(max!=i)
	   {
	               temp=a[i];
			a[i]=a[max];
			a[max]=temp;
	   }
   }

   printf("\n选择优化一:\n");
   for(i=0;i<N;i++)
   {
       printf("%4d ",a[i]);
   }
   printf("\n");

   return 0;
}</span>

选择优化二:

<span style="font-size:18px;">#include<stdio.h>
#define N 10
int main()
{
   int i,max,min,left,right,a[N],temp;
   for(i=0;i<N;i++)
   {
        scanf("%d",&a[i]);
   }
   for(left=0,right=N-1;left<right;left++,right--)
   {
          max=left;
	   min=right;
	   for(i=left;i<=right;i++)
	   {
	      if(a[i]>a[max])
		  {
		     max=i;
		  }
		  if(a[i]<a[min])
		  {
		     min=i;
		  }
	   }
	   if(max!=left)
	   {
	       temp=a[left];
		   a[left]=a[max];
		   a[max]=temp;
		   if(min==left)
		   {
		      min=max;

		   }
	   }
	   if(min!=right)
	   {
	               temp=a[min];
			a[min]=a[right];
			a[right]=temp;
	   }

   }
   printf("\n选择优化2 :\n");
   for(i=0;i<N;i++)
   {
     printf("%4d ",a[i]);
   }
   printf("\n");

    return 0;
}</span>
时间: 2024-10-20 15:57:01

选择排序优化算法的相关文章

选择排序的算法和优化

正常的选择排序 选择排序是每一次从待排序的数据元素中选出最小的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 分为三步: ①.从待排序序列中,找到关键字最小的元素 ②.如果最小元素不是待排序序列的第一个元素,将其和第一个元素互换 ③.从余下的 N - 1 个元素中,找出关键字最小的元素,重复(1).(2)步,直到排序结束 代码如下 1 package com.ssm.排序算法; 2 3 public class 选择排序 { 4 /** 5 * 换位方法 6 */ 7 publi

冒泡排序以及冒牌排序优化算法

冒泡排序是最常用的排序算法,在笔试中也非常常见,能手写出冒泡排序算法可以说是基本的素养. 算法重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来,这样越大的元素会经由交换慢慢“浮”到数列的顶端. 时间复杂度 算法稳定性 冒泡排序就是把小的元素往前调或者把大的元素往后调.比较是相邻的两个元素比较,交换也发生在这两个元素之间.所以,如果两个元素相等,是不会再交换的:如果两个相等的元素没有相邻,那么即使通过前面的两两交换把两个相邻起来,这时候也不会交换,所以相同元素的前后顺

选择排序---堆排序算法(Javascript版)

堆排序分为两个过程: 1.建堆. 堆实质上是完全二叉树,必须满足:树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字. 堆分为:大根堆和小根堆,升序排序采用大根堆,降序排序采用小根堆. 如果是大根堆,则通过调整函数将值最大的节点调整至堆根. 2.将堆根保存于尾部,并对剩余序列调用调整函数,调整完成后,再将最大跟保存于尾部-1(-1,-2,...,-i),再对剩余序列进行调整,反复进行该过程,直至排序完成. 以下代码在nodejs中执行通过 //调整函数function

选择排序---堆排序算法(Javascript版) 降序排列

//调整函数 function headAdjust(elements, pos, len){ //将当前节点值进行保存 var swap = elements[pos]; //定位到当前节点的左边的子节点 var child = pos * 2 + 1; //递归,直至没有子节点为止 while(child < len){ //如果当前节点有右边的子节点,并且右子节点较小的场合,采用右子节点 //和当前节点进行比较 if(child + 1 < len && elements

排序算法(二)——选择排序

上篇博客介绍了冒泡算法,接下来介绍插入排序和选择排序. 选择排序; 算法思想:从无序序列中找到最大(或最小)元素,放在序列的最右边(或最左边). 代码如下: #include <iostream> using namespace std; void swap(int &a,int &b) { int temp=a; a=b; b=temp; return; } void Insert_sort(int list[],int begin,int end) { for(int i=

常见排序算法之选择排序

1.直接选择排序 直接选择排序和直接插入排序类似,都将数据分为有序区和无序区,所不同的是直接插入排序是将无序区的第一个元素直接插入到有序区以形成一个更大的有序区,而直接选择排序是从无序区选一个最小的元素直接放到有序区的最后. 设数组为a[0-n-1]. 1.      初始时,数组全为无序区为a[0..n-1].令i=0 2.      在无序区a[i-n-1]中选取一个最小的元素,将其与a[i]交换.交换之后a[0-i]就形成了一个有序区. 3.      i++并重复第二步直到i==n-1.

算法学习之排序算法:选择排序

选择排序:每一趟在n-i+1(i=1,2,...,n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录. 一.简单选择排序 一趟选择排序操作: 通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i(1<=i<=n)个记录交换之. 对L[1...n]中记录进行简单选择排序的算法为:令i从1至n-1,进行n-1趟选择操作.简单选择排序过程中,所需进行记录移动的操作次数较少,然而,无论记录的初始排列如何,所需关键字间的比较次数相同.因此,总的时间复杂度为O(n^2)

数据结构与算法之排序(2)选择排序 ——in dart

选择排序的算法复杂度与冒泡排序类似,其比较的时间复杂度仍然为O(N2),但减少了交换次数,交换的复杂度为O(N),相对冒泡排序提升很多.算法的核心思想是每次选出一个最小的,然后与本轮循环中的第一个进行比较,如果需要则进行交换. 1 import 'dart:math' show Random; 2 3 void main() { 4 final seed = 100, rnd = Random(), length = 100; 5 var list = 6 List<int>.generate

选择排序及选择排序的优化

package com.Summer_0421.cn; import java.util.Arrays; /** * @author Summer * 选择排序 * 通过记录下标值,优化选择排序 */ public class Test06 { public static void main(String[] args) { int[] array = {18, 34, 79, 62, 59, 15, 39, 75, 62, 10}; System.out.println(Arrays.toSt