冒泡排序and简单选择排序

冒泡排序:(如升序)

在第一趟排序中,从第一个元素开始,扫描整个待排序元素序列,若相邻的两个元素逆序,则交换位置。直到最后一个元素,此时,最后一个元素必为最大的元素。

第二趟排序,依然从第一个元素开始扫描直到倒数第二个元素。

第三趟排序,从第一个扫描到倒数第三个。

......

直到只剩一个元素需要扫描。

程序如下:


#include<stdio.h>
int main()
{
	int arr[]={1,2,3,9,8,7,5,6,4};
	int i=0;
	int j=0;
	int len=sizeof(arr)/sizeof(arr[0]);
	for(i=0;i<len;i++)
	{
		for(j=0;j<len-i;j++)
		{
			if(arr[j+1]<arr[j])
			{
				int temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}
	}
	for(i=0;i<len;i++)
		printf("%d ",arr[i]);
	return 0;
}

简单快速排序:

第一趟排序,从第一个元素开始进行比较,选出整个序列中最小的元素,和第一个元素交换位置。

第二趟排序,从第二个元素开始比较,选出最小的,和第二个交换位置。

......

程序如下:

#include<stdio.h>
int main()
{
	int arr[]={1,2,3,9,8,7,5,6,4};
	int i=0;
	int j=0;
	int k=0;
	for(i=0;i<sizeof(arr)/sizeof(arr[0])-1;i++)
	{
		k=i;
		for(j=i+1;j<sizeof(arr)/sizeof(arr[0]);j++)
		{
			if(arr[j]<arr[k])
				k=j;
		}
		if(k!=i)
		{
			int temp=arr[i];
			arr[i]=arr[k];
			arr[k]=temp;
		}
	}
	for(i=0;i<sizeof(arr)/sizeof(arr[0]);i++)
		printf("%d ",arr[i]);
	return 0;
}
时间: 2024-12-28 21:04:09

冒泡排序and简单选择排序的相关文章

冒泡排序与简单选择排序——Java实现

1.冒泡排序 1)原理说明:重复遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 2)代码实现: package com.test.sort; public class BubbleSort { public static void sort(int[] data) { for (int i = 0; i < data.length; i++) { for (int j = data.length

排序(二)__冒泡排序、简单选择排序和直接插入排序

前面<排序(一)__综述>提到按照算法的复杂度分为简单算法和改进算法两大类,本文主要就简单算法中的冒泡排序.简单选择排序和直接插入排序进行通俗详细的解析. 一.冒泡排序 1.基本概念 冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止.(动态图来自维基百科) 2.关键代码(优化之后) void BubbleSort(SqList *L) { int i,j; Status flag=TRUE;            //flag用作标记,避

直接插入排序、二分插入排序、希尔排序、冒泡排序与简单选择排序

一.直接插入排序 稳定,时间复杂度:最好O(n).最差O(n^2).平均O(n^2),空间复杂度O(1) void InsertSort(int L[], int n) { int i, j,key; for (i = 1; i<n; i++) if(L[i] < L[i-1])//需要将L[i]插入到有序表L[0...i-1] { key = L[i]; for(j = i-1; j >= 0 && key < L[j]; j--)//后移 L[j+1] = L[

七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)

 写在前面: 排序是计算机程序设计中的一种重要操作,它的功能是将一个数据元素的任意序列,重新排列成一个按关键字有序的序列.因此排序掌握各种排序算法非常重要.对下面介绍的各个排序,我们假定所有排序的关键字都是整数.对传入函数的参数默认是已经检查好了的.只是简单的描述各个算法并给出了具体实现代码,并未做其他深究探讨. 基础知识: 由于待排序的记录数量不同,使得排序过程中设计的存储器不同,可将排序方法分为两大类:一类是内部排序,指的是待排序记录存放在计算机随机存储器中进行的排序过程.另一类是外部排序,

排序算法学习之简单排序(冒泡排序,简单选择排序,直接插入排序)

一.冒泡排序 冒泡排序算是最基础的一种算法了,复杂度为O(N^2),其基本思想是:从最低端数据开始,两两相邻比较,如果反序则交换.代码如下: /*最基本的冒泡排序*/ void BubbleSort1 (int n, int *array) /*little > big*/ { int i, j; for (i=0; i<n-1; i++) { for (j=n-1; j>i; j--) { if (array[j] < array[j-1]) { int temp = array

冒泡排序、简单选择排序、直接插入排序

冒泡排序(Bubble Sort)的基本思想:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止.时间复杂度为O(n2). 简单选择排序(Simple Selection Sort)的基本思想:通过n-i次关键字之间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换.应该说,尽管与冒泡排序同为O(n2), 但简单选择排序的性能上还是要略优于冒泡排序. 直接插入排序(Straight Insertion Sort)的基本思想:将一个记录插入到前面已经排序好的有序表中

冒泡排序、简单选择排序

冒泡排序:(如升序) 在第一趟排序中,从第一个元素开始,扫描整个待排序元素序列,若相邻的两个元素逆序,则交换位置.直到最后一个元素,此时,最后一个元素必为最大的元素. 第二趟排序,依然从第一个元素开始扫描直到倒数第二个元素. 第三趟排序,从第一个扫描到倒数第三个. ...... 直到只剩一个元素需要扫描. 程序如下: #include<stdio.h> int main() { int arr[]={1,2,3,9,8,7,5,6,4}; int i=0; int j=0; int len=s

排序 之 冒泡排序 简单选择排序 直接插入排序 希尔排序

排序的基本概念 假设含有n个记录的序列为{r1,r2,--,rn},其相应的关键字分别为{k1,k2,--,kn},需确定1,2,--,n的一种排序p1,p2,--,pn,使其相应的关键字满足kp1≤kp2≤--≤kpn非递减(或非递增)关系,即使得序列称为一个按关键字有序的序列{rp1,rp2,--,rpn},这样的操作就称为排序. 排序的稳定性 假设ki=kj(1≤i≤n,1≤j≤n,i≠j),且在排序前的序列中ri领先于rj(即i<j).如果排序后ri仍领先于rj,则称所用的排序方法是稳定

冒泡排序算法和简单选择排序算法的js实现

之前已经介绍过冒泡排序算法和简单选择排序算法和原理,现在有Js实现. 冒泡排序算法 let dat=[5, 8, 10, 3, 2, 18, 17, 9]; function bubbleSort(data) { for(let i=0;i<data.length-1;i++){ for(let j=0;j<data.length-1-i;j++){ if(data[j]>data[j+1]){ [data[j],data[j+1]]=[data[j+1],data[j]]; } } }