千奇百怪的排序算法
来源:互联网 发布:windows to go 怎么用 编辑:程序博客网 时间:2024/05/18 02:07
PS:时间有限,先介绍2种
学号:16340182
数据科学与计算机学院
目录
- 一插入排序
- 二快速排序
一、插入排序
排序思想
插入排序运用的思想是逐渐扩大战果,即将原数列中的元素一个一个的插入到已经排好序的数列中,直至所有的数都插入到了有序数列中,这时,排序就完成了。排序方法
1.新建一个数组,用于保存已排序好的数列(称为有序数列);
2.从原数列中取出一个数,插入1有序数列中,使有序数列任然有序;
3.重复步骤2,直至原数列中所有的数都插入到有序数列中.C语言代码:
#include <stdio.h> //这里为从小到大的排序int a[100],b[100]; int InsertSort(int n){ //a为有序数组,b为原数组,n为原数组中的元素个数 int i,j,k; for(i=0;i<n;i++){ j=0; while((b[i]>a[j])&&(j<i)) j++; //找到元素b[i]的合适位置 for(k=i;k>j;k--) a[k]=a[k-1]; //将有序数组中的元素后移 a[j]=b[i]; //将新元素插入有序数组中 }}int main(){} //main自己脑补......
二、快速排序
排序思想
实践证明,快速排序是所有排序算法中最高效的一种。排序算法运用了分治的思想,先使列表中前半部分的数小于(或大于)后半部分的数,然后对列表的前半部分和后半部分分别排序,则整个列表都排序完毕了。排序方法
1.选取一个基准数A0 ;(可以随机选取,一般选取序号在中间的数)
2.设置两个变量i,j当做指针;
3.i从0开始逐渐增大,直到A[i]>=A0 ;
4.j从最大开始逐渐减小,直到A[j]<=A0 ;
5.交换A[i]和A[j];
6.重复步骤3.4.5.,直到i>=j;
7.之后对0到i的部分和i到最后一个数重复上面6个步骤,即对两个部分再分别进行快排.C语言代码
#include <stdio.h>int a[100];int QuickSort(int head,int tail){ int i=head,j=tail,mid,c; if(head<tail){ //这里一定要加一个判断函数是否执行的条件,否则会陷入死循环 mid=a[(head+tail)/2]; //取中间值 while(i<j){ while(a[i]<mid) i++; //这里要注意不等号没有等于,否则运行可能出错 while(a[j]>mid) j--; c=a[i];a[i]=a[j];a[j]=c; //这里是交换a[i]与a[j] } QuickSort(head,i); QuickSort(i+1,tail); }}int main{} //main还是自己脑补。。。
PS:这个快排的代码不能解决带有重复数据的排序,若要使该代码可以对带有重复数据一组数值进行排序,应怎样修改呢?同学们自己可以想一想(ง •̀_•́)ง。。。。。(好吧我承认是我暂时还没想= =,等我想出来了会更新的。。。)
- 插入的方法:只需将从原数列中取出的数从头开始与有序数列中的数对比,找到合适的位置后,有序数列中后面的数依次后移一位,该数插入合适位置即可。 ↩
2 0
- 千奇百怪的排序算法
- 千奇百怪的窗体(窗口)
- Lotus中千奇百怪的 $$
- 千奇百怪的Hello World
- 千奇百怪的枕头
- 千奇百怪
- asp.net千奇百怪的日历
- asp.net千奇百怪的日历
- asp.net千奇百怪的日历
- asp.net千奇百怪的日历
- asp.net千奇百怪的日历
- asp.net千奇百怪的日历
- asp.net千奇百怪的日历
- asp.net千奇百怪的日历
- asp.net千奇百怪的日历
- asp.net千奇百怪的日历
- asp.net千奇百怪的日历
- asp.net千奇百怪的日历
- 关于spring-mvc.xml的mvc:resources元素浅析。
- Spring基本架构(读书笔记)
- UGUI与NGUI的区别与优缺点
- 怎样将CorelDRAW中绘图窗口进行平移和滚动
- 图形学领域的关键算法及源码链接
- 千奇百怪的排序算法
- 下载faceScrub人脸数据库(单线程版本)
- handy:echo server
- 修改表结构常用SQL
- 更改xml文件造成资源找不到
- javaHL(JNI) Not Available svn导入项目遇到的一些鬼
- NumPy文件存取
- 哈夫曼树 C语言实现
- google guava Joiner 示列