當前位置:首頁 » 編程軟體 » 編程里排序

編程里排序

發布時間: 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)

熱點內容
i西安編程 發布:2024-04-25 16:55:35 瀏覽:262
核磁看壓縮 發布:2024-04-25 16:37:22 瀏覽:431
訪問不上光貓 發布:2024-04-25 16:13:44 瀏覽:319
部隊電腦配置有哪些 發布:2024-04-25 16:13:43 瀏覽:970
霍曼密碼鎖什麼價位 發布:2024-04-25 16:08:01 瀏覽:750
ftp雙機熱備 發布:2024-04-25 16:03:48 瀏覽:360
我的世界伺服器限制模組 發布:2024-04-25 15:55:32 瀏覽:888
平板電腦能連接雲伺服器嗎 發布:2024-04-25 15:54:05 瀏覽:937
多看怎麼上傳雲 發布:2024-04-25 15:45:31 瀏覽:39
山東ftp 發布:2024-04-25 15:44:46 瀏覽:261