氣泡排序(順序表)和簡單選擇排序(單鏈表)
河南理工大學
16 學年—17學年第 1 學期 資料結構 實驗任務書
專業名稱: 實驗學時: 2
課程名稱:資料結構 任課教師: 翟海霞
實驗題目: 排序演算法實現與比較
實驗環境: Visual C++ 6.0
實驗八:
實驗目的和要求:熟悉多種排序演算法,理解每種排序演算法思想,掌握排序演算法的基本設計方法,掌握排序演算法時間複雜度和空間複雜度的分析方法。
實驗內容:1.對所講過演算法深入理解。
2.
將氣泡排序再做進一步的優化。如果有100
3. 試以單鏈表為儲存結構,實現簡單選擇排序演算法。
#include<stdio.h> #include<stdlib.h> #define Maxsize 20 typedef struct { int key; }RedType; typedef struct { RedType r[Maxsize+1]; int length; }SqList; void Bubblesort(SqList *L) { int i,j,n,change; RedType x; n=L->length;change=1; for(i=0;i<n-1&&change;++i) { change=0; for(j=0;j<n-i-1;++j) if(L->r[j].key>L->r[j+1].key) {x=L->r[j];L->r[j]=L->r[j+1];L->r[j+1]=x;change=1; } } } typedef struct Node { int date; struct Node *next; }node,*List; //建立單鏈表 List creat_list(int n) { int i=0; List head,L,temp; head=(List)malloc(sizeof(node)); head->next=NULL; temp=head; for(;i<n;i++) { L=(List)malloc(sizeof(node)); L->next=NULL; printf("Please input the date:"); scanf("%d",&L->date); temp->next=L; temp=L; } return head; } List getmin(List L) {//取得從指標L開始的連結串列中記錄的最小值 List min; min=L; while(L->next) { if(min->date>(L->next->date)) { min=L->next; } L=L->next; } return min;//返回較小值的指標 } void selectsort(List head)//簡單選擇排序--單鏈表 { List j,i=head->next; int temp; for(;i->next!=NULL;i=i->next) { j=getmin(i); if(i->date!=j->date) { temp=i->date; i->date=j->date; j->date=temp; } } } //輸出單鏈表 void printf_list(List head) { List p=head->next; while(p) { printf("%3d",p->date); p=p->next; } } int main() { List head,temp; SqList L,*p=&L; int i;L.length=10; int choose,n; printf("————————————排序演算法與比較——————————\n\n"); printf("操作:\n"); printf("1.氣泡排序\n"); printf("2.簡單選擇排序\n"); printf("0.退出\n"); choose=-1; while(1) { printf("請輸入您的操作:"); scanf("%d",&choose); switch(choose) { case 1:{ //printf("請輸入資料個數:"); //scanf("%d",&n); printf("請輸入資料:\n"); for(i=0;i<L.length;i++) scanf("%d",&L.r[i].key); printf("原資料:"); for(i=0;i<L.length;i++) printf("%4d",L.r[i].key); Bubblesort(p); printf("\n排序後:"); for(i=0;i<L.length;i++) printf("%4d",L.r[i].key); printf("\n"); } break; case 2:{ printf("請輸入元素個數:"); scanf("%d",&n); head=creat_list(n); printf_list(head); printf("\n"); selectsort(head); printf_list(head); printf("\n"); }break; case 0:exit(0); } } return 0; }
相關推薦
氣泡排序(順序表)和簡單選擇排序(單鏈表)
河南理工大學 16 學年—17學年第 1 學期 資料結構 實驗任務書 專業名稱: 實驗學時: 2 課程名稱:資料結構 任課教師: 翟海霞 實驗題目: 排序演算法實現與比較 實驗環境: Visual C+
排序演算法(1):簡單選擇排序和堆排序
1.簡單選擇排序 (1)本質:每一趟從給定待排序序列A[ 1......n ] ,選擇出第i小元素,並和A[i]交換。 程式碼: /************************************************* 演算法:簡單選擇排序(升序) 時間
C語言實現氣泡排序和簡單選擇排序
氣泡排序(Bubble Sort)的基本思想為兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序記錄為止。 其時間複雜度為O(n^2)。 簡單選擇排序(Simple Selection Sort)
封裝解構,集合,字典,內建函數和簡單選擇排序相關知識及習題
byte efault 練習 索引 list() 運算符 sha pow(x 不存在 封裝 將多個值使用逗號分割,組合在一起本質上,返回一個元組,只是省掉了小括號python特有語法,被很多語言學習和借鑒 解構 把線性結構的元素解開,並順序的賦給其它變量左邊接納的變量數要和
直插,希爾,和簡單選擇排序
直插,希爾,和簡單選擇排序 直接插入:直接插入排序是一種最簡單的排序方法,其基本操作是將一條記錄插入到已排好的有序表中,從而得到一個新的、記錄數量增1的有序表。 時間複雜度:平均情況O(n^2) 最好情況O(n) 最壞情況O(n^2) 空間複雜度:O(1) 穩定
兩種簡單的陣列排序演算法:氣泡排序和直接選擇排序(升序)
氣泡排序的基本思想是:面對一排資料,先從前往後兩兩比較,如果前一個數比後一個數大就交換兩者的順序,即第一個數和第二個數比,第二個數和第三個數比,……,倒數第二個數和最後一個數比,這樣一輪下來以後最大的數就排到最後;接著把除去最大的數的該組資料進行同樣的操作,直至
多種排序算法的思路和簡單代碼的實現(一)
insert i++ 前後端 分享 size quicksort 執行 判斷 clas 就自己簡單的理解了一些排序算法(JAVA)思路和代碼分享給大家:歡迎大家進行交流。 直接插入排序,折半插入排序,冒泡排序,快速排序 1 public class Sort { 2
順序表建立和就地逆置(函式)
本題要求實現順序表的建立和就地逆置操作函式。L是一個順序表,函式ListCreate_Sq(SqList &L)用於建立一個順序表,函式ListReverse_Sq(SqList &L)
6-72 順序表建立和就地逆置 (10 分)
6-72 順序表建立和就地逆置 (10 分) 本題要求實現順序表的建立和就地逆置操作函式。L是一個順序表,函式ListCreate_Sq(SqList &L)用於建立一個順序表,函式ListReverse_Sq(SqList &L)是在不引入輔助陣列的前提
排序演算法(四)、選擇排序 —— 簡單選擇排序 和 堆排序
1、簡單選擇排序簡單選擇排序思想是:從頭到尾(從後往前也行)遍歷序列,先固定第一個位置的資料,將該位置後面的資料,依次和這個位置的資料進行比較,如果比固定位置的資料大,就交換。這樣,進行一趟排序以後,第一個位置就是最小的數了。然後重複進行,第 2 次遍歷並且比較後,第二個位置
圖演算法 圖的表示(鄰接表和鄰接矩陣)和拓撲排序
圖的表示 圖有兩種表示方法,分別是鄰接矩陣和鄰接表。這裡以有向圖為例說明。 鄰接矩陣 鄰接矩陣是一個二維陣列A。對於每條邊 (u,v),置A[u][v]等於true;否則,陣列元素為false。 如果邊有一個權,那麼可以置A[u][v]等於該權,而使用一個很大或者很小的權
排序演算法(一)氣泡排序,簡單選擇排序,直接插入排序,希爾排序
氣泡排序,簡單選擇排序,直接插入排序是三種複雜度為O(n2)的演算法,希爾排序在特殊增量序列的時候可以獲得複雜度為O(n3/2) 氣泡排序 1、最簡單的排序實現 這裡把每個數和這個數之後的每個數比較,大於就交換位置。 缺點:多出了很多次沒有用的交
順序表建立和就地逆置 (10 分)
本題要求實現順序表的建立和就地逆置操作函式。L是一個順序表,函式ListCreate_Sq(SqList &L)用於建立一個順序表,函式ListReverse_Sq(SqList &L)是在不引入輔助陣列的前提下將順序表中的元素進行逆置,如原順序表元素依次為1,2,3,4,則逆置
七大內部排序演算法總結(插入排序、希爾排序、氣泡排序、簡單選擇排序、快速排序、歸併排序、堆排序)
寫在前面: 排序是計算機程式設計中的一種重要操作,它的功能是將一個數據元素的任意序列,重新排列成一個按關鍵字有序的序列。因此排序掌握各種排序演算法非常重要。對下面介紹的各個排序,我們假定所有排序的關鍵字都是整數、對傳入函式的引數預設是已經檢查好了的。只
資料結構 排序(氣泡排序改進,簡單選擇排序連結串列實現)
實驗題目: 排序演算法實現與比較 實驗環境: Visual C++ 6.0 實驗八: 實驗目的和要求:熟悉多種排序演算法,理解每種排序演算法思想,掌握排序演算法的基本設計方法,掌握排序演算法
排序——直接選擇排序(簡單選擇排序)
無序 代碼 .... 插入排序 相對 方法 import 排序 color 直接選擇排序也稱簡單選擇排序,是一種相對簡單的排序算法,它的基本思想是:從一列數中找出最小的,和第一個交換;剩下的重新找出最小的,和這列數的第二個交換,......一直進行n-1次比較之後,該數列已
算法(二) 簡單選擇排序
簡單選擇排序從左到右依次選取一個值作為默認最大值,依次與其它值比較,如果有值比該值大,那最大值指針改指向該值,一輪比較完成後,如果最大值指針沒有變化,則從下一個值繼續下一輪比較,如果指針有變動,則最新指針位置的數值與初始指針位置數值交換位置。代碼如下:lst1 = [ [1, 8, 9, 5, 6,
集中式(SVN)和分布式(Git)版本控制系統的簡單比較
ron table targe 特點 相對 tps ble 12px pan 集中式(SVN) 分布式(Git) 是否有中央服務器 有。開發人員需要從中央服務器獲得最新版本的項目然後在本地開發,開發完推送給中央服務器。因此脫離服
SSH框架的多表查詢和增刪查改 (方法一)上
ips 查詢 href ssh margin blank 麻煩 tle 指點 原創作品,允許轉載,轉載時請務必標明作者信息和聲明本文章==》 http://www.cnblogs.com/zhu520/p/7772823.html 因為最近在做Android 練習
Access(表的創建和管理)和CorelDRAW課程總結(對象的操作和管理)
存儲 管理工具 完成 core ces 知識 包括 掌握 重要 access總結 access表的是數據庫操作及錄入數據的必要步驟,要用表來存儲數據首先是創建一個表。要創建表首先必須了解access的數據類型、表結構字段屬性等內容。 創建完表還要向其中輸入數據,數據的輸入必