当前位置:首页 » 编程软件 » 编程里排序

编程里排序

发布时间: 2022-08-08 14:30:33

‘壹’ C++编程中排序的算法有哪些

// Sort.cpp : Defines the entry point for the console application. // #include "stdafx.h" typedef struct { int key; }elemtype; void InsertSort(elemtype x[],int n)//简单插入排序 { int i,j; elemtype a; for(i=0;i<n-1;i++) { a=x[i+1]; j=i; while(j>-1 && a.key<x[j].key) { x[j+1]=x[j]; j--; } x[j+1]=a; } } void SelectSort(elemtype x[],int n)//简单选择排序 { int i,j,small; elemtype swap; for(i=0;i<n-1;i++) { small=i; for(j=i+1;j<n;j++) { if(x[j].key<x[small].key) small=j; } if(small!=i) { swap=x[i]; x[i]=x[small]; x[small]=swap; } } } void PopSort(elemtype x[],int n)//冒泡发排序 { int i,j,flag; elemtype swap; flag=1; for(i=0;i<n-1 && flag==1;i++) { flag=0; for(j=0;j<n-1;j++) if(x[j].key>x[j+1].key) { flag=1; swap=x[j]; x[j]=x[j+1]; x[j+1]=swap; } if(flag==0) return; } } void QuickSort(elemtype x[],int left,int right)//快速排序 { int i,j; elemtype swap; i=left;j=right; swap=x[left]; while(i<j) { while(i<j && swap.key<=x[j].key) j--; if(i<j) { x[i]=x[j]; i++; } while(i<j && swap.key>=x[i].key) i++; if(i<j) { x[j]=x[i]; j--; } } x[i]=swap; if(left<i) QuickSort(x,left,i-1); if(i<right) QuickSort(x,j+1,right); } void merge(elemtype R[],elemtype x[],int k,int n)//归并排序 { int i1,i2,L1,L2,r1,r2,j; L1=0;j=0; while(L1+k<n-1) { L2=L1+k; r1=L2-1; r2=(L2+k-1<=n-1)?L2+k-1:n-1; for(i1=L1,i2=L2;i1<=r1 && i2<=r2;j++) { if(R[i1].key<=R[i2].key) { x[j]=R[i1]; i1++; } else { x[j]=R[i2]; i2++; } } while(i1<=r1) { x[j]=R[i1]; i1++;j++; } while(i2<=r2) { x[j]=R[i2]; i2++;j++; } L1=r2+1; } for(i1=1;i1<n;i1++,i2++) x[j]=x[i1]; } void MergeSort(elemtype R[],int n)//归并排序的调用函数 { int i,k; elemtype x[99]; k=1; while(k<n) { merge(R,x,k,n); for(i=0;i<n;i++) R[i]=x[i]; k=2*k; } } void PrintfNb(elemtype x[],int nCount)//输出数组元素 { printf("排序结果:\n"); for(int i=0;i<nCount;i++) printf("%d ",x[i].key); printf("\n"); printf("排序结束...\n"); } void main() { int n,i,nSelect; elemtype nList[99];//定义一个数组 printf("请输入数组元素...\n"); for(i=0;i<99999;i++) { scanf("%d",&n); if(n==0) break;//输入0时创建数组完毕 nList[i].key=n; printf("输入成功...\n"); } printf("请选择排序方法...\n"); printf("1,简单插入排序 2,简单选择排序 3,冒泡发排序 4,快速排序 5,归并排序\n"); scanf("%d",&nSelect); while(nSelect>5 || nSelect<1) { printf("请输入正确的序号!"); scanf("%d",&nSelect); } switch(nSelect) { case 1: printf("你选择的是简单插入排序法...\n"); InsertSort(nList,i); break; case 2: printf("你选择的是简单选择排序法...\n"); SelectSort(nList,i); break; case 3: printf("你选择的是冒泡排序法...\n"); PopSort(nList,i); break; case 4: printf("你选择的是快速排序法...\n"); QuickSort(nList,0,i); break; case 5: printf("你选择的是归并排序法...\n"); MergeSort(nList,i); } PrintfNb(nList,i); }

‘贰’ 在java编程中如何对数组进行排序,并输出排序后的数组及原数组下标值

java变成对数组进行排序可以使用ArraySort方法,保存源数组下标值可以存入map中,如下代码:

importjava.util.ArrayList;
importjava.util.Arrays;
importjava.util.HashMap;
importjava.util.List;

publicclassceshi{
publicstaticvoidmain(String[]args){
intn=5;
int[]a={8,5,4,6,2,1,7,9,3};
HashMapmap=newHashMap();
for(inti=0;i<a.length;i++){
map.put(a[i],i);//将值和下标存入Map
}

//排列
Listlist=newArrayList();
Arrays.sort(a);//升序排列
for(inti=0;i<a.length;i++){
list.add(a[i]);
}
for(Objectobject:list){
System.out.print(object+",");
}
System.out.println();

//查找原始下标
for(inti=0;i<n;i++){
System.out.print(map.get(a[i])+",");
}

}

}

运行结果如下:

‘叁’ C语言编程:选择法排序

选择排序是一种简单直观的排序算法。


工作原理:

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。


性能:

选择排序是不稳定的排序方法(比如序列[5, 5, 3]第一次就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)。

选择排序的时间复杂度是O(n^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)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。


C语言版代码:

#include<stdio.h>
#include<math.h>

#defineMAX_SIZE101
#defineSWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t))

voidsort(int[],int);/*selectionsort*/

intmain()
{
inti,n;
intlist[MAX_SIZE];
printf(":");
scanf_s("%d",&n);
if(n<1||n>MAX_SIZE){
fprintf(stderr,"Impropervalueofn ");
exit(1);
}
for(i=0;i<n;i++){/*randomlygeneratenumbers*/
list[i]=rand()*1000;
printf("%d",list[i]);
}
sort(list,n);
printf(" Sortedarray: ");
for(i=0;i<n;i++)/*printoutsortednumbers*/
printf("%d",list[i]);
printf(" ");
return0;
}
voidsort(intlist[],intn)
{
inti,j,min,temp;
for(i=0;i<n-1;i++){
min=i;
for(j=i+1;j<n;j++)
if(list[j]<list[min])
min=j;
SWAP(list[i],list[min],temp);
}
}

‘肆’ VB编程怎么排序

冒泡排序法思路:(假设有10个数,需要从小到大排)
Dim a(10)
Randomize
For i = 1 To 10
a(i) = Int(Rnd * i + 3 + Rnd * 10) '给数组赋值
Print a(i);
Next i
Print

For i = 1 To 10 ‘
For j = i + 1 To 10
If a(j) < a(i) Then ’如果剩余的比a(i)小的话,就交换
t = a(j)
a(j) = a(i)
a(i) = t
End If
Next j
Next i

For k = 1 To 10
Print a(k); ‘打印排好的数
Next k
Print


冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。
它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。

‘伍’ C语言数组七个数升序排列和降序排列怎么编程

#include<stdio.h>void Lsort(int a[],int n);//函数声明
void Hsort(int a[],int n);void main()
{
int a[7]; //7个数的数组。定义的是整数,如需实数,改为float型。
int i;
printf("\nplease input seven integers\n");
for(i=0;i<7;i++)
{
printf("a[%d]=",i);
scanf("%d",&a[i]);
}
printf("\nthe integers you input are:\n");
for(i=0;i<7;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
printf("\n");
Lsort(a,7); //函数调用
Hsort(a,7);
}//===========================升序======================================
void Lsort(int a[],int n)
{
int i,j,k; //用于循环控制。
int m; //作为中间变量,也称暂存单元。
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(a[k]>a[j])
{
k=j;
}
if(k!=i)
{
m=a[i];
a[i]=a[k];
a[k]=m;
}
}
printf("\n数组升序排序后为:\n");
for(i=0;i<n;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
printf("\n");
}//===========================降序==========================
void Hsort(int a[],int n)
{
int i,j,k; //用于循环控制。
int m; //作为中间变量,也称暂存单元。
for(i=0;i<n;i++)
{
k=i;
for(j=i+1;j<n;j++)
if(a[k]<a[j])
{
k=j;
}
if(k!=i)
{
m=a[i];
a[i]=a[k];
a[k]=m;
}
}
printf("\n数组降序排序后为:\n");
for(i=0;i<n;i++)
{
printf("a[%d]=%d\n",i,a[i]);
}
printf("\n");
}

‘陆’ 关于排序的编程

int[] numbs = {4,9,6,3,5};
int temp = 0;
for(int i = 0; i < numbs.length; i++ ){
for(int j = 0; j < numbs.length - 1; j++){
if(numbs[i] > numbs[j]){
temp = numbs[i];
numbs[i] = numbs[j];
numbs[j] = temp;
}
}
}
for(int i = 0 ; i<numbs.length; i++){
System.out.println(numbs[i]);
}

‘柒’ 谁能帮我详细解答下编程里的几种排序方法。

详解: http://ke..com/w?ct=17&lm=0&tn=WikiSearch&pn=0&rn=10&word=%C5%C5%D0%F2&submit=search归并排序 归并排序归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是... 5千字 2008-7-24 coolxiaojiB 快速排序 概述快速排序(Quick Sort)是一种有效的排序算法。虽然算法在最坏的情况下运行时间为O(n^2),但由于平均运行时间为O(nlogn),并且在内存使用、程序实现复杂性上表现优秀,尤其是对快速排序算法进行随机化的可能,使得快速排序在一般情况下是最实用... 8千字 2008-7-29 追月一族2 堆排序 斯坦福大学计算机科学系教授罗伯特·弗洛伊德(Robert W.Floyd)和威廉姆斯(J.Williams)在1964年共同发明了着名的堆排序算法( Heap Sort ) 定义n个关键字序列Kl,K2,…,Kn称为(Heap),当且仅当该序列满足如下性质(简称为堆性质): (1... 10千字 2008-7-14 Watfourane 冒泡排序 冒泡排序:BubbleSort基本概念冒泡排序的基本概念是:依次比较相邻的两个数,将大数放在前面,小数放在后面。即首先比较第1个和第2个数,将大数放前,小数放后。然后比较第2个数和第3个数,将大数放前,小数放后,如此继续,直至比较最后两... 3千字 2008-4-12 凛冬将至_ 排序算法 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。分类在计算机科学所使用的排序算法通常被分类为: 计算的复杂度(最差、平均、和最好表现),依据串行(list)的大小(n)。一般而言,好的表现... 5千字 2008-3-18 12月26日魔羯座 希尔排序 希尔排序(Shell Sort)是插入排序的一种。因D.L.Shell于1959年提出而得名。希尔排序基本思想基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为dl的倍数的记录放在同一个组中。先在各组内进行直... 2千字 2008-1-15 WXD11011 基数排序 “基数排序法”(radix sort)则是属于“分配式排序”(distribution sort),基数排序法又称“桶子法”(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些“桶”中,借以达到排序的作用,基数排序法是属于稳定性... 2千字 2007-12-23 gotolabel Shell排序 希尔排序是一种快速排序法,它出自D.L.Shell,因此而得名。Shell排序又称作缩小增量排序。基本思想:不断把待排序的对象分成若干个小组,对同一小组内的对象采用直接插入法排序,当完成了所有对象都分在一个组内的排序后,排序过程结束。... 1千字 2006-10-14 raoping2005 选择排序 基本思想 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。排序过程 【示例】: 初始关键字 [49 38 65 97 76 13 27 49]第一...

‘捌’ C语言编程 排序

/*有一种排序方法叫RadixSort,就是针对这种多关键字的排序的
时间复杂度线性的,但是有个缺点就是必须知道关键字的范围,不知道题主的关键字范围是多少?

好吧,假设我的关键字最多有100个,基数最大不超过999
程序如下:*/

//Radix Sort算法,采取LSD(低位优先)


#include<stdio.h>

#include<stdlib.h>

#define KEYNUM 100 //关键字的最大个数

#define RADIX 1000 //基数的范围是0-RADIX-1

typedef struct Node

{

int ele[KEYNUM+1];

struct Node *next;

} Node;


Node *e[RADIX],*f[RADIX]; //链队列的首指针和尾指针表


void init(Node* head,int n,int m) //初始化输入链表

{

int i,j;

Node *p,*q=head;

for(i=0; i<n; i++)

{

p=(Node*)malloc(sizeof(Node));

if(!p)

return;

for(j=1; j<=m; j++)

scanf("%d",&p->ele[j]);

p->next=NULL;

q->next=p;

q=q->next;

}

}


void distribute(Node* head,int locate,int r) //进行Radix排序

{

Node *p,*q;

int i;

while(head->next!=NULL)

{

q=head->next;

head->next=q->next;

q->next=NULL;

p=f[q->ele[locate]];

while(p->next!=NULL)

p=p->next;

p->next=q;

e[q->ele[locate]]->next=q;

}

p=head;

for(i=0; i<=r; i++)

{

while(f[i]->next!=e[i]->next)

{

q=f[i]->next;

f[i]->next=q->next;

q->next=NULL;

p->next=q;

p=p->next;

}

q=f[i]->next;

if(q)

{

f[i]->next=q->next;

q->next=NULL;

p->next=q;

p=p->next;

}

f[i]->next=e[i]->next=NULL;

}

}


void display(Node* head,int m) //显示链表各个节点

{

int i;

Node* p=head->next;

if(!head)

return;

while(p)

{

for(i=1; i<=m; i++)

printf("%d ",p->ele[i]);

printf(" ");

p=p->next;

}

}

void Delete(Node* head) //释放链表节点

{

Node *p;

if(!head)

return;

while(head->next)

{

p=head->next;

head->next=p->next;

free(p);

}

}

int main()

{

Node* head;

int n,m,r,i;

for(i=0; i<RADIX; i++) //初始化首尾指针指向空指针

{

f[i]=(Node*)malloc(sizeof(Node));

e[i]=(Node*)malloc(sizeof(Node));

if(!f[i]||!e[i])

exit(1);

f[i]->next=e[i]->next=NULL;

}

head=(Node*)malloc(sizeof(Node));

if(!head)

return 1;

printf("待排序个数以及关键字的个数:");

scanf("%d%d",&n,&m);

printf("输入数据: ");

init(head,n,m);

printf("输入基数范围0-n:");

scanf("%d",&r);

for(i=m; i>=1; i--)

distribute(head,i,r); //从低位到高位进行Radix排序

display(head,m);

for(i=0; i<RADIX; i++) //释放首尾指针数组

{

free(f[i]);

free(e[i]);

}

Delete(head);

free(head);

return 0;

}


题主的答案:

‘玖’ 怎么在慧编程图形化编程的列表中进行排序

算法比较少。
从左边找到第一个最大的,从右边找到一个最小的,然后交换,直到左边下标大于右边下标,然后交换left和右边下标对应的数据再进行递归运算。
缩小排序范围,即去掉最后方位置正确的元素,对前方数组进行新一轮遍历,重复第1步骤。直到范围不能缩小为止,排序完成。

‘拾’ 如何对python编程中的列表元素按成绩高低进行排序呢

最简单的办法就是需要指定列表排序方法中的参数“key”。代码如下:
第一种:
stu=[['john',79],['mame',96],['herry',85],['lili',95],['ziling',63]]
def takeSecond(elem):
return elem[1]
stu.sort(key=takeSecond,,reverse=True)
print(stu)
第二种:
stu=[['john',79],['mame',96],['herry',85],['lili',95],['ziling',63]]
s=sorted(stu,key=lambda student: student[1],,reverse=True)
print(s)

热点内容
如何设置一个通俗易懂的密码 发布:2024-05-05 13:52:21 浏览:621
新网易我的世界服务器 发布:2024-05-05 13:42:44 浏览:661
算法题写错了 发布:2024-05-05 13:34:57 浏览:804
sql按小时分组 发布:2024-05-05 13:26:25 浏览:94
张艺谋我们一家访问人 发布:2024-05-05 12:38:05 浏览:111
美版安卓系统怎么安装 发布:2024-05-05 12:37:18 浏览:920
qq邮箱缓存地址 发布:2024-05-05 12:37:16 浏览:986
电位算法 发布:2024-05-05 12:36:01 浏览:727
我的世界清风斗罗大陆服务器地址 发布:2024-05-05 12:35:50 浏览:453
dell服务器如何进入bios 发布:2024-05-05 12:34:26 浏览:330