當前位置:首頁 » 課程大全 » 數據結構課程設計快速排序

數據結構課程設計快速排序

發布時間: 2021-02-08 22:38:11

『壹』 數據結構的課程設計是要演示快速排序的過程,用C++,求教需要用到什麼知識呢

樓主你好~
你是想知道快排的原理呢還是想知道這個程序的思路呢。。
前者的話,wiki上面回答的很好。

後者的話,如果是要演示整個過程,很簡單,每進行一次輪詢就將數組輸出到屏幕上,繼而產生整個排序過程了。

『貳』 數據結構課程設計綜合排序代碼及實驗報告書。

需要對條目進行自動排序,當增加或減少條目時,下面的會自動進行再排序,你回答中的格式--樣式和格式的操作,我不是很明白,要怎麼操作才能實現自動排序。

『叄』 數據結構 如何快速排序

void
quick_sort(int a[], int start, int end)
{
int division = partition(a, start, end);
if (start < end)
{
quick_sort(a, start, division);
quick_sort(a, division + 1, end);
}
}

『肆』 數據結構快速排序

一個類似的快速排序,自己看了之後自己改,很簡單的!!!
例如:
#include<stdio.h>

int partition(int a[],int low,int high)
{
int key=a[low];
int temp;
while(low<high)
{
while(low<high && a[high]>key)
{
high--;
}
if(low<high)
{
temp=a[high];
a[high]=a[low];
a[low]=temp;
}
while(low<high && a[low]<key)
{
low++;
}
if(low<high)
{

temp=a[low];
a[low]=a[high];
a[high]=temp;
}
}
return low;
}
void Qsort(int a[],int low,int high)
{
int index;
if(low<high){
index=partition(a,low,high);
Qsort(a,low,index-1);
Qsort(a,index+1,high);
}
}
void display(int a[],int n)
{
int i;
for(i=0;i<n;i++)
{
printf("%d\t",a[i]);
}
}
void main()
{

int a[10]={23,45,21,67,49,1,28,3,98,70};
printf("原數據為:\n");
display(a,10);
Qsort(a,0,9);
printf("從小到大排序後的數為:\n");
display(a,10);
}

『伍』 數據結構課程設計:排序演算法性能比較 編寫程序在運行時產生1000個隨機整數,分

#include<stdio.h>
#include<stdlib.h>
#include <math.h>
#define L 8 //排序元素個數
#define FALSE 0
#define TRUE 1

typedef struct
{
int key;
char otherinfo;
}RecType;

typedef RecType Seqlist[L+1];
int num; //定義排序趟數的全局變數
Seqlist R;
//直接插入排序
void Insertsort()
{
int i,j,k,m=0;
printf("\n\t\t原始數據為(按回車鍵開始排序):\n\t\t");
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
for(i=2;i<=L;i++)
{
if(R[i].key<R[i-1].key)
{
R[0]=R[i];
j=i-1;
while(R[0].key<R[j].key)
{
R[j+1]=R[j];
j--;
}
R[j+1]=R[0];
}
m++;
printf("\t\t第%d趟排序結果為(按回車鍵繼續):\n\t\t",m);
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
}
printf("\n\t\t排序的最終結果是:\n\t\t");
for(i=1;i<=L;i++)
{
printf("%5d",R[i].key);
}
printf("\n");
}
//希爾排序
void Shellsort()
{
int i,j,gap,x,m=0,k;
printf("\n\t\t原始數據為(按回車鍵開始排序):\n\t\t");
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
gap=L/2;
while(gap>0)
{
for(i=gap+1;i<=L;i++)
{
j=i-gap;
while(j>0)
{
if(R[j].key>R[j+gap].key)
{
x=R[j].key;
R[j].key=R[j+gap].key;
R[j+gap].key=x;
j=j-gap;
}
else
{
j=0;
}
}
}
gap=gap/2;
m++;
printf("\t\t第%d趟排序結果為(按回車鍵開始排序):\n\t\t",m);
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
}
printf("\n\t\t排序的最終結果是:\n\t\t");
for(i=1;i<=L;i++)
{
printf("%5d",R[i].key);
}
printf("\n");
}
//冒泡排序
void Bubblesort()
{
int i,j,k;
int exchange;
printf("\n\t\t原始數據為(按回車鍵開始排序):\n\t\t");
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
for(i=1;i<L;i++)
{
exchange=FALSE;
for(j=L;j>=i+1;j--)
{
if(R[j].key<R[j-1].key)
{
R[0].key=R[j].key;
R[j].key=R[j-1].key;
R[j-1].key=R[0].key;
exchange=TRUE;
}
}
if(exchange)
{
printf("\t\t第%d趟排序結果為(按回車鍵開始排序):\n\t\t",i);
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
}
}
printf("\n\t\t排序的最終結果是:\n\t\t");
for(i=1;i<=L;i++)
{
printf("%5d",R[i].key);
}
printf("\n");
}

int Partition(int i,int j) //i和j為形式參數,分別代表low和high
{
RecType pirot=R[i];
while(i<j)
{
while(i<j&&R[j].key>=pirot.key)
{
j--;
}
if(i<j)
{
R[i++]=R[j];
}
while(i<j&&R[j].key<=pirot.key)
{
i++;
}
if(i<j)
{
R[j--]=R[i];
}
}
R[i]=pirot;
return i;
}
//遞歸形式為快速排序
void Quicksort(int low,int high)
{
int pirotpos,k;
if(low<high)
{
pirotpos=Partition(low,high);
num++;
printf("\t\t第%d趟排序結果為(按回車鍵開始排序):\n\t\t",num);
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
Quicksort(low,pirotpos-1);
Quicksort(pirotpos+1,high);
}
}
//選擇排序
void Selectsort()
{
int i,j,k,h;
printf("\n\t\t原始數據為(按回車鍵開始排序):\n\t\t");
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
for(i=1;i<L;i++)
{
h=i;
for(j=i+1;j<=L;j++)
{
if(R[j].key<R[h].key)
{
h=j;
}
}
if(h!=j)
{
R[0]=R[i];
R[i]=R[h];
R[h]=R[0];
}
printf("\t\t第%d趟排序結果為(按回車鍵開始排序):\n\t\t",i);
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
}
printf("\n\t\t排序的最終結果是:\n\t\t");
for(i=1;i<=L;i++)
{
printf("%5d",R[i].key);
}
printf("\n");
}

void Merge(int low,int mm,int high)
{
int i=low,j=mm+1,p=0;
RecType *R1;
R1=new RecType[high-low+1];
if(!R1)
{
printf("內存容量不夠!");
}
while(i<=mm&&j<=high)
{
R1[p++]=(R[i].key<=R[j].key)?R[i++]:R[j++];
}
while(i<=mm)
{
R1[p++]=R[i++];
}
while(j<=high)
{
R1[p++]=R[j++];
}
for(p=0,i=low;i<=high;p++,i++)
{
R[i]=R1[p];
}
}

void MergePass(int length)
{
int i;
for(i=1;i+2*length-1<=L;i=i+2*length)
{
Merge(i,i+length-1,i+2*length-1);
}
if(i+length-1<L)
{
Merge(i,i+length-1,L);
}
}
//歸並排序
void Mergesort()
{
int length,k,m=0,i;
printf("\n\t\t原始數據為(按回車鍵開始排序):\n\t\t");
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
for(length=1;length<L;length*=2)
{
MergePass(length);
m++;
printf("\t\t第%d趟排序結果為(按回車鍵開始排序):\n\t\t",m);
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
}
printf("\n\t\t排序的最終結果是:\n\t\t");
for(i=1;i<=L;i++)
{
printf("%5d",R[i].key);
}
printf("\n");
}
//堆建
void CreateHeap(int root,int index)
{
int j,temp,finish;
j=2*root;
temp=R[root].key;
finish=0;
while(j<=index&&finish==0)
{
if(j<index)
{
if(R[j].key<R[j+1].key)
{
j++;
}
}
if(temp>=R[j].key)
{
finish=1;
}
else
{
R[j/2].key=R[j].key;
j=j*2;
}
}
R[j/2].key=temp;
}//堆排序
void Heapsort()
{
int i,j,temp,k;
for(i=(L/2);i>=1;i--)
{
CreateHeap(i,L);
}
for(i=L-1,k=1;i>=1;i--,k++)
{
temp=R[i+1].key;
R[i+1].key=R[1].key;
R[1].key=temp;
CreateHeap(1,i);
printf("\t\t第%d趟排序結果為(按回車鍵開始排序):\n\t\t",k);
for(j=1;j<=L;j++)
{
printf("%5d",R[j].key);
}
getchar();
printf("\n");
}
}
void Heap()
{
int i;
printf("\n\t\t原始數據為(按回車鍵開始排序):\n\t\t");
for(i=1;i<=L;i++)
{
printf("%5d",R[i].key);
}
getchar();
printf("\n");
Heapsort();
printf("\n\t\t排序的最終結果是:\n\t\t");
for(i=1;i<=L;i++)
{
printf("%5d",R[i].key);
}
printf("\n");
}

main()
{
Seqlist S;
int i,k;
char ch1,ch2,q;
printf("\n\t\t1000個隨機數產生:\n\t\t");
for(i=1;i<=1000;i++)
{

S[i].key = rand() % 999 + 1; //產生1-1000的隨機數
//printf("%d\n", number); // 去掉注釋顯示隨機數的輸出}
printf("\n\t\t排序數據已經輸入完畢!");
ch1='y';
while(ch1=='y'||ch1=='Y')
{
printf("\n");
printf("\n\t\t 排 序 子 系 統 \n");
printf("\n\t\t*******************************************\n");
printf("\n\t\t* 1--------更新排序數據 *\n");
printf("\n\t\t* 2--------直接插入排序 *\n");
printf("\n\t\t* 3--------希 爾 排 序 *\n");
printf("\n\t\t* 4--------冒 泡 排 序 *\n");
printf("\n\t\t* 5--------快 速 排 序 *\n");
printf("\n\t\t* 6--------選 擇 排 序 *\n");
printf("\n\t\t* 7--------歸 並 排 序 *\n");
printf("\n\t\t* 8--------堆 排 序 *\n");
printf("\n\t\t* 0--------返 回 *\n");
printf("\n\t\t*******************************************\n");
printf("\n\t\t 請選擇菜單號(0--8):");
scanf("%c",&ch2);
getchar();
for(i=1;i<=L;i++)
{
R[i].key=S[i].key;
}
switch(ch2)
{
case '1':
printf("\n\t\t請輸入%d個待排序數據(按回車鍵分隔):\n\t\t",L);
for(i=1;i<=L;i++)
{
scanf("%d",&S[i].key);
getchar();
printf("\t\t");
}
printf("\n\t\t排序數據已經輸入完畢!");
break;
case '2':
Insertsort();
break;
case '3':
Shellsort();
break;
case '4':
Bubblesort();
break;
case '5':
printf("\n\t\t原始數據為(按回車鍵開始排序):\n\t\t");
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
getchar();
printf("\n");
num=0;
Quicksort(1,L);
printf("\n\t\t排序的最終結果是:\n\t\t");
for(k=1;k<=L;k++)
{
printf("%5d",R[k].key);
}
printf("\n");
break;
case '6':
Selectsort();
break;
case '7':
Mergesort();
break;
case '8':
Heap();
break;
case '0':
ch1='n';
break;
default:
system("cls");
printf("\n\t\t 對不起,您的輸入有誤,請重新輸入!\n");
break;
}
if(ch2!='0')
{
if(ch2=='2'||ch2=='3'||ch2=='4'||ch2=='5'||ch2=='6'||ch2=='7'||ch2=='8')
{
printf("\n\n\t\t排序輸出完畢!");
printf("\n\t\t按回車鍵返回。");
q=getchar();
if(q!='\xA')
{
getchar();
ch1='n';
}
}
}
}
}

『陸』 數據結構課程設計 排序演算法分析該怎麼寫

CSDN 去這個網站吧,畢業論文,各種演算法,反正是與計算機有關的,都可以在上面找到!

『柒』 數據結構 有關於快速排序

15,45,53,18,36,72,30,48,36,90

因為它的作用法則就是先找出最大的值放在最後一個位置上專.然後找出最小的一個值屬放在第一位上.然後從兩邊的-1開始繼續下一步.所以第一步就是將最大的值放在最後面.將最小的值放在最前面!!

『捌』 數據結構中的快速排序法程序

void quicksort(int* p,int m,int n)
{
if (m==n||m==n-1) return;
int i=partition(p,m,n);
quicksort(p,i+1,n);
quicksort(p,m,i);
} partition函數這里寫不下,你版自己想想吧權

『玖』 數據結構課程設計的各種排序演算法的綜合比較 哪位大神幫寫一下~

排序法 平均時間 最差情形 穩定度 額外空間 備注
冒泡 O(n2) O(n2) 穩定 O(1) n小時較好
交換 O(n2) O(n2) 不穩定 O(1) n小時較好
選擇 O(n2) O(n2) 不穩定 O(1) n小時較好
插入 O(n2) O(n2) 穩定 O(1) 大部分已排序時較好
基數 O(logRB) O(logRB) 穩定 O(n) B是真數(0-9),R是基數(個十百)
Shell O(nlogn) O(ns) 1<s<2 不穩定 O(1) s是所選分組
快速 O(nlogn) O(n2) 不穩定 O(nlogn) n大時較好
歸並 O(nlogn) O(nlogn) 穩定 O(1) n大時較好
堆 O(nlogn) O(nlogn) 不穩定 O(1) n大時較好

『拾』 數據結構 快速排序

樓主要的不是源碼吧,那我把演算法跟樓主說下. 快速排序就是先取一個數(一般為第1個數)作為關鍵數,然後將所有比他小的數放他前面,比他大的數放他後面,這個過程叫做一趟快速排序.一趟快速排序完成後,以該關鍵數為分界點,把前後的數繼續執行一趟快速排序.整個過程就是遞歸調用一趟快速排序,得到最終的結果. 1)設置兩個變數I、J,排序開始的時候:I=0,J=N-1; 2)以第一個數組元素作為關鍵數據,賦值給key,即 key=A[0]; 3)從J開始向前搜索,即由後開始向前搜索(J=J-1),找到第一個小於key的值A[J],並與A[I]交換; 4)從I開始向後搜索,即由前開始向後搜索(I=I+1),找到第一個大於key的A[I],與A[J]交換; 5)重復第3、4、5步,直到 I=J; (3,4步是在程序中沒找到時候j=j-1,i=i+1,直至找到為止。找到並交換的時候i, j指針位置不變。另外當i=j這過程一定正好是i+或j+完成的最後另循環結束) 下面就看看排序的過程.我們選第一個數83為關鍵數.第一次: 從後往前比,找到15比83小,交換位置,15,40,63,13,84,35,96,57,39,79,61,83第二次: 從前往後比,找到84比83大,交換位置,15,40,63,13,83,35,96,57,39,79,61,84第三次: 從後往前比,找到61比83小,交換位置,15,40,63,13,61,35,96,57,39,79,83,84第四次: 從前往後比,找到96比83大,交換位置,15,40,63,13,61,35,83,57,39,79,96,84第五次: 從後往前比,找到79比83小,交換位置,15,40,63,13,61,35,79,57,39,83,96,84接下來的循環比較都不會再交換位置了,直到 I=J 跳出循環 接著以83為分界點,分別對83前面的數,以及83後面的數,使用上述方法進行排序 83前面的數排序: 15,40,63,13,61,35,79,57,39以第一個數15為關鍵數.13,40,63,15,61,35,79,57,3913,15,63,40,61,35,79,57,39 83後面的數排序: 96,84以第一個數96為關鍵數.84,96 接著以15為分界點,分別對15前面的數,以及15後面的數進行排序15前面的數只有1315後面的數排序: 63,40,61,35,79,57,39以第一個數63為關鍵數.39,40,61,35,79,57,6339,40,61,35,63,57,7939,40,61,35,57,63,79 以63為分界點,後面只有79,前面對39,40,61,35,57進行排序以39為關鍵數35,40,61,39,5735,39,61,40,57 以39為分界點,前面只有35,對後面61,40,57進行排序以61為關鍵數57,40,61 以61為分界點,對前面57,40進行排序以57為關鍵數40,57 現在就完成排序了,以上數字都是在數組中進行位置交換,最終得到的數組為13,15,35,39,40,57,61,63,79,83,84,96

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919