編程中哨兵
/*
題目:《設計實現一個班級信息管理系統》
要求:
合理運用C語言的數組,指針,結構體以及文件操作等,實現一個模擬的班級通訊錄管理系統。
該系統用來管理學生的基本信息,通信信息。具體的要如下:
1) 工作人員可以通過此程序來管理學生的信息,包括查詢,添加,修改,刪除等功能。
2) 在進行添加時,系統會自動監測所添加的學生信息是否已經存在,如果存在,會提示用戶,
該學生已經存在。
3) 在刪除時,要首先彈出對話框,讓用戶確認是否刪除。只有經過確認才能夠被刪除。
4) 在進行學生信息管理時,不準用戶修改學號。
5) 通過鍵盤或讀取文件的方法讀取學生的信息。
6) 能夠運用結構化程序設計的選擇和循環結構,並熟練使用相關的語句(如 do while,for,if-else,if等)。
7) 程序要有主菜單,能夠完成主要的功能。
[附1]
有關學生的信息,包括,學號,姓名,性別,年齡,電話。
[附2]
我是大一的新生,現在C的內容還沒有完全學完,關於枚舉,鏈表,文件操作等還未學,所以請各位高手在幫小弟時多加一點提示,不然我可能看不懂```
還有,關於第(4)個要求和第(7)個要求,可以忽略```
*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
typedef struct Student//學生信息
{
signed short id;
char name[11];
char sex[7];
signed short age;
char telNum[16];
}Student;
typedef struct Node
{
Student data;
Node* next;
}Node;
static Node* begin=NULL;//哨兵結點
static signed short len=0;//鏈表長度
void printMenu();//列印菜單
void printBye();//列印結束語
void printList();//列印所有學生信息
void printStudent(Student st);//列印學生信息
Node* lookupNode(signed short stid);//根據學號查詢學生信息。
int addNode(Student st);//添加學生信息。成功返回鏈表長度。內存分配失敗-1;信息重復0
int deleteNode(signed short stid); //根據學號刪除學生信息。成功返回鏈表長度;未找到-1
int updateNode(Student st);//根據學號修改學生信息。成功返回鏈表長度;未找到0
void main()
{
//初始化鏈表。
begin=(Node*)malloc(sizeof(Node));
begin->next=NULL;
printf("----------------------------------------------------------------------------\n");
printf("--- 班級信息管理系統 ---\n");
printf("--- 沙支誇依 2007-12-21 ---\n");
printf("----------------------------------------------------------------------------\n");
printf("||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||\n");
printMenu();
while (1)
{
char ch;
ch=getchar();
fflush(stdin);
Student student;
memset(&student,0,sizeof(Student));
switch (ch)
{
case '1':
printf("---添加學生信息。(學號為 0 結束)\n");
while (1)
{
printf("請輸入新學號: ");
scanf("%d", &student.id);
if (!student.id)
break;
printf("請輸入學生姓名: ");
fflush(stdin);
gets(student.name);
printf("請輸入學生姓別: ");
scanf("%s", student.sex);
printf("請輸入學生年齡: ");
scanf("%d", &student.age);
printf("請輸入學生電話: ");
scanf("%s", student.telNum);
int succ=addNode(student);
if (succ)
{
if (-1==succ)
printf("內存錯誤!請重新輸入!\n");
}
else
printf("對不起!該學號已被佔用!\n");
printf("\n");
}
break;
case '2':
printf("---刪除學生信息。(學號為 0 結束)\n");
while (1)
{
signed short stid=0;
printf("請輸入要刪除學生的學號:");
fflush(stdin);
scanf("%d", &stid);
if (!stid)
break;
Node* delNode=lookupNode(stid);
if (!delNode)
printf("對不起!你要刪除的記錄不存在。\n");
else
{
printStudent(delNode->data);
printf("您確定要刪除這條記錄嗎?(任意鍵刪除/ n 取消)\n");
fflush(stdin);
char cDelete=getchar();
if ('n'==cDelete)
continue;
printf("刪除成功!剩餘記錄數: %d\n",deleteNode(stid));
}
printf("\n");
}
break;
case '3':
printf("---修改學生信息。(學號為 0 結束)\n");
while (1)
{
signed short stid=0;
printf("請輸入要修改學生的學號:");
fflush(stdin);
scanf("%d", &stid);
if (!stid)
break;
Node* updataNode=lookupNode(stid);
if (!updataNode)
printf("對不起!你要刪除的記錄不存在。\n");
else
{
printStudent(updataNode->data);
Student student;
student.id=stid;
printf("修改學生姓名: ");
fflush(stdin);
gets(student.name);
printf("修改學生姓別: ");
scanf("%s", student.sex);
printf("修改學生年齡: ");
scanf("%d", &student.age);
printf("修改學生電話: ");
scanf("%s", student.telNum);
updateNode(student);
printf("修改成功!\n");
printStudent(updataNode->data);
}
printf("\n");
}
break;
case '4':
printf("---查詢學生信息。(學號為 0 結束)\n");
while (1)
{
signed short stid=0;
printf("請輸入要修改學生的學號:");
fflush(stdin);
scanf("%d", &stid);
if (!stid)
break;
Node* findNode=lookupNode(stid);
if (!findNode)
printf("對不起!你要刪除的記錄不存在。\n");
else
{
printStudent(findNode->data);
}
printf("\n");
}
break;
case '5':
printList();
printMenu();
break;
case '6':
printBye();
return;
default:
printMenu();
}
}
}
void printMenu()
{
printf("----------------------------------------------------------------------------\n");
printf("--- 1、增加學生信息。 2、刪除學生信息。 ---\n");
printf("--- 3、修改學生信息。 4、查詢學生信息。 ---\n");
printf("--- 5、列印所有信息。 6、退出。 ---\n");
printf("----------------------------------------------------------------------------\n");
}
void printBye()
{
printf("----------------------------------------------------------------------------\n");
printf(" 感謝您使用班級信息管理系統 \n");
printf(" 再 見 \n");
printf("----------------------------------------------------------------------------\n");
}
void printList()
{
Node* temp=begin->next;
if (!temp)
{
printf("暫時無記錄可供操作!\n");
}
while (temp)
{
printStudent(temp->data);
temp=temp->next;
}
}
void printStudent(Student st)
{
printf("學號:%-6d 姓名:%-10s 性別:%-6s 年齡:%-3d 電話:%-15s\n",
st.id, st.name, st.sex, st.age, st.telNum);
printf("--------------------------------------------------------------------------\n");
}
Node* lookupNode(signed short stid)
{
Node* temp=begin->next;
while (temp)
{
if (temp->data.id==stid)
return temp;
temp=temp->next;
}
return NULL;
}
int addNode(Student st)
{
if (lookupNode(st.id))
return 0;
Node* temp=(Node*)malloc(sizeof(Node));
if (!temp)
return -1;
temp->data=st;
temp->next=begin->next;
begin->next=temp;
return ++len;
}
int deleteNode(signed short stid)
{
Node* temp=begin;
Node* pos=NULL;
while (temp->next)
{
if (temp->next->data.id==stid)
{
pos=temp->next;
temp->next=pos->next;
free(pos);
return --len;
}
temp=temp->next;
}
return -1;
}
int updateNode(Student st)
{
Node* temp=lookupNode(st.id);
if (!temp)
return 0;
temp->data=st;
return len;
}
Ⅱ C++ 編寫程序,隨機輸入一批正整數,求這些數的和。利用哨兵值作為輸入的結束。
#define _CRT_SECURE_NO_DEPRECATE
#include
int main()
{
int i, j, k, sum = 0;
while (scanf("%d", &j), j > 0)
{
if (j % 2 == 0)
sum += j;
}
printf("%d\n", sum);
return 0;
}
Ⅲ C語言編程
你說的就是數值排序。我寫了兩個,一個是用插入排序,一個是用冒泡排序。只要先輸入要排序的數值個數,再依次輸入各數值,即得結果。程序在win-tc下試驗通過。
(一)/* 插入排序 */
#include <stdio.h>
#define MAX 255
int R[MAX];
void Insert_Sort(int n)
{ /* 對數組R中的記錄R[1..n]按遞增序進行插入排序 */
int i,j;
for(i=2;i<=n;i++) /* 依次插入R[2],…,R[n] */
if(R[i]<R[i-1])
{/* 若R[i]大於等於有序區中所有的R,則R[i] */
/* 應在原有位置上 */
R[0]=R[i];j=i-1; /* R[0]是哨兵,且是R[i]的副本 */
do{ /* 從右向左在有序區R[1..i-1]中查找R[i]的插入位置 */
R[j+1]=R[j]; /* 將關鍵字大於R[i]的記錄後移 */
j--;
}while(R[0]<R[j]); /* 當R[i]≥R[j]時終止 */
R[j+1]=R[0]; /* R[i]插入到正確的位置上 */
}
}
main()
{
int i,n;
clrscr();
puts("Please input total element number of the sequence:");
scanf("%d",&n);
if(n<=0||n>MAX)
{
printf("n must more than 0 and less than %d.\n",MAX);
exit(0);
}
puts("Please input the elements one by one:");
for(i=1;i<=n;i++)
scanf("%d",&R[i]);
puts("The sequence you input is:");
for(i=1;i<=n;i++)
printf("%4d",R[i]);
Insert_Sort(n);
puts("\nThe sequence after insert_sort is:");
for(i=1;i<=n;i++)
printf("%4d",R[i]);
puts("\n Press any key to quit...");
getchar();
getchar();
}
(二)/*冒泡排序*/
#include <stdio.h>
#define MAX 255
int R[MAX];
void Bubble_Sort(int n)
{ /* R(l..n)是待排序的文件,採用自下向上掃描,對R做冒泡排序 */
int i,j;
int exchange; /* 交換標志 */
for(i=1;i<n;i++){ /* 最多做n-1趟排序 */
exchange=0; /* 本趟排序開始前,交換標志應為假 */
for(j=n-1;j>=i;j--) /* 對當前無序區R[i..n]自下向上掃描 */
if(R[j+1]<R[j]){/* 交換記錄 */
R[0]=R[j+1]; /* R[0]不是哨兵,僅做暫存單元 */
R[j+1]=R[j];
R[j]=R[0];
exchange=1; /* 發生了交換,故將交換標志置為真 */
}
if(!exchange) /* 本趟排序未發生交換,提前終止演算法 */
return;
}
}
void main()
{
int i,n;
clrscr();
puts("Please input total element number of the sequence:");
scanf("%d",&n);
if(n<=0||n>MAX)
{
printf("n must more than 0 and less than %d.\n",MAX);
exit(0);
}
puts("Please input the elements one by one:");
for(i=1;i<=n;i++)
scanf("%d",&R[i]);
puts("The sequence you input is:");
for(i=1;i<=n;i++)
printf("%4d",R[i]);
Bubble_Sort(n);
puts("\nThe sequence after bubble_sort is:");
for(i=1;i<=n;i++)
printf("%4d",R[i]);
puts("\n Press any key to quit...");
getchar();
getchar();
}
Ⅳ 誰能解釋下C語言哨兵的原理,為什麼加入哨兵後就能判斷是否越界最好用代碼舉例解釋!
所謂「哨兵」就是用一個特殊值來作為數組的邊界,使用「哨兵」可以少用一條判斷語句,所以可以提高程序的效率。
比如從整數數組arr中,查找有沒有整數num。
應用:假設一個亂序數組,需要查找一個元素是否在該數組中,這時需要用到順序查找,也就是遍歷數組。
一般情況下我們會寫下如下代碼:
int Sequential_Search(int *a,int n,int key)
{
//數組從1開始
int i;
for(int i=1;i<=n;i++)
{
if(a[i]==key)
return i;
}
return 0;//查找失敗
}
有的數據結構書上,會運用哨兵元素,改成這樣的代碼:
int Sequential_Search2(int *a int n,int key)
{
int i=0;
a[0]=key;//哨兵
i=n;
while(a[i]!=key)
{
i--;
}
return i;//返回0就是查找失敗
}
Ⅳ 編程C:使用「監視哨」方法實現順序表查找,並說明監視哨的作用
你說的「監視哨」就是「哨兵」吧,順序表查找似乎不需要,「哨兵」多用在排序中,下面給出一個實例帶詳注。我發的寫的程序都是經過驗證無誤的。本程序在win-tc和Dev-c++下運行通過。
/* 插入排序 */
#include <stdio.h>
#include <conio.h>
#define MAX 255
int R[MAX];
void Insert_Sort(int n)
{ /* 對數組R中的記錄R[1..n]按遞增序進行插入排序 */
int i,j;
for(i=2;i<=n;i++) /* 依次插入R[2],…,R[n] */
if(R[i]<R[i-1])
{/* 若R[i]大於等於有序區中所有的R,則R[i] */
/* 應在原有位置上 */
R[0]=R[i];j=i-1; /* R[0]是哨兵,且是R[i]的副本 */
do{ /* 從右向左在有序區R[1..i-1]中查找R[i]的插入位置 */
R[j+1]=R[j]; /* 將關鍵字大於R[i]的記錄後移 */
j--;
}while(R[0]<R[j]); /* 當R[i]≥R[j]時終止 */
R[j+1]=R[0]; /* R[i]插入到正確的位置上 */
}
}
main()
{
int i,n;
clrscr();
puts("Please input total element number of the sequence:");
scanf("%d",&n);
if(n<=0||n>MAX)
{
printf("n must more than 0 and less than %d.\n",MAX);
exit(0);
}
puts("Please input the elements one by one:");
for(i=1;i<=n;i++)
scanf("%d",&R[i]);
puts("The sequence you input is:");
for(i=1;i<=n;i++)
printf("%4d",R[i]);
Insert_Sort(n);
puts("\nThe sequence after insert_sort is:");
for(i=1;i<=n;i++)
printf("%4d",R[i]);
puts("\n Press any key to quit...");
getch();
}
Ⅵ c語言冒泡排序的編程
#include <stdio.h>
void sort(int *a,int len)
{int i=0;
int j;
int t;
for(i=0;i<len-1;i++)
{
for(j=0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
{
t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
int main(int argc, char *argv[])
{
int a[10]={
-999,2,3,77,12,88,0,-8,99,100
};
int i=0;
sort(a,10);
for(i=0;i<10;i++)
{
printf(%d ,a[i]);
}
return 0;
}
冒泡演算法冒泡排序的演算法分析與改進 交換排序的基本思想是:兩兩比較待排序記錄的關鍵字,發現兩個記錄的次序相反時即進行交換,直到沒有反序的記錄為止。 應用交換排序基本思想的主要排序方法有:冒泡排序和快速排序。
冒泡排序 1、排序方法 將被排序的記錄數組R[1..n]垂直排列,每個記錄R看作是重量為R.key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃描數組R:凡掃描到違反本原則的輕氣泡,就使其向上飄浮。如此反復進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。 (1)初始 R[1..n]為無序區。 (2)第一趟掃描 從無序區底部向上依次比較相鄰的兩個氣泡的重量,若發現輕者在下、重者在上,則交換二者的位置。即依次比較(R[n],R[n-1]),(R[n-1],R[n-2]),…,(R[2],R[1]);對於每對氣泡(R[j+1],R[j]),若R[j+1].key<R[j].key,則交換R[j+1]和R[j]的內容。 第一趟掃描完畢時,最輕的氣泡就飄浮到該區間的頂部,即關鍵字最小的記錄被放在最高位置R[1]上。 (3)第二趟掃描 掃描R[2..n]。掃描完畢時,次輕的氣泡飄浮到R[2]的位置上…… 最後,經過n-1 趟掃描可得到有序區R[1..n] 注意: 第i趟掃描時,R[1..i-1]和R[i..n]分別為當前的有序區和無序區。掃描仍是從無序區底部向上直至該區頂部。掃描完畢時,該區中最輕氣泡飄浮到頂部位置R上,結果是R[1..i]變為新的有序區。
2、冒泡排序過程示例 對關鍵字序列為49 38 65 97 76 13 27 49的文件進行冒泡排序的過程
3、排序演算法 (1)分析 因為每一趟排序都使有序區增加了一個氣泡,在經過n-1趟排序之後,有序區中就有n-1個氣泡,而無序區中氣泡的重量總是大於等於有序區中氣泡的重量,所以整個冒泡排序過程至多需要進行n-1趟排序。 若在某一趟排序中未發現氣泡位置的交換,則說明待排序的無序區中所有氣泡均滿足輕者在上,重者在下的原則,因此,冒泡排序過程可在此趟排序後終止。為此,在下面給出的演算法中,引入一個布爾量exchange,在每趟排序開始前,先將其置為FALSE。若排序過程中發生了交換,則將其置為TRUE。各趟排序結束時檢查exchange,若未曾發生過交換則終止演算法,不再進行下一趟排序。 (2)具體演算法 void BubbleSort(SeqList R) { //R(l..n)是待排序的文件,採用自下向上掃描,對R做冒泡排序 int i,j; Boolean exchange; //交換標志 for(i=1;i<n;i++){ //最多做n-1趟排序 exchange=FALSE; //本趟排序開始前,交換標志應為假 for(j=n-1;j>=i;j--) //對當前無序區R[i..n]自下向上掃描 if(R[j+1].key<R[j].key){//交換記錄 R[0]=R[j+1]; //R[0]不是哨兵,僅做暫存單元 R[j+1]=R[j]; R[j]=R[0]; exchange=TRUE; //發生了交換,故將交換標志置為真 } if(!exchange) //本趟排序未發生交換,提前終止演算法 return; } //endfor(外循環) } //BubbleSort
4、演算法分析 (1)演算法的最好時間復雜度 若文件的初始狀態是正序的,一趟掃描即可完成排序。所需的關鍵字比較次數C和記錄移動次數M均達到最小值: Cmin=n-1 Mmin=0。 冒泡排序最好的時間復雜度為O(n)。 (2)演算法的最壞時間復雜度 若初始文件是反序的,需要進行n-1趟排序。每趟排序要進行n-i次關鍵字的比較(1≤i≤n-1),且每次比較都必須移動記錄三次來達到交換記錄位置。在這種情況下,比較和移動次數均達到最大值: Cmax=n(n-1)/2=O(n2) Mmax=3n(n-1)/2=O(n2) 冒泡排序的最壞時間復雜度為O(n2)。 (3)演算法的平均時間復雜度為O(n2) 雖然冒泡排序不一定要進行n-1趟,但由於它的記錄移動次數較多,故平均時間性能比直接插入排序要差得多。 (4)演算法穩定性 冒泡排序是就地排序,且它是穩定的。 5、演算法改進 上述的冒泡排序還可做如下的改進: (1)記住最後一次交換發生位置lastExchange的冒泡排序 在每趟掃描中,記住最後一次交換發生的位置lastExchange,(該位置之前的相鄰記錄均已有序)。下一趟排序開始時,R[1..lastExchange-1]是有序區,R[lastExchange..n]是無序區。這樣,一趟排序可能使當前有序區擴充多個記錄,從而減少排序的趟數。具體演算法【參見習題】。 (2) 改變掃描方向的冒泡排序 ①冒泡排序的不對稱性 能一趟掃描完成排序的情況: 只有最輕的氣泡位於R[n]的位置,其餘的氣泡均已排好序,那麼也只需一趟掃描就可以完成排序。
【例】對初始關鍵字序列12,18,42,44,45,67,94,10就僅需一趟掃描。 需要n-1趟掃描完成排序情況: 當只有最重的氣泡位於R[1]的位置,其餘的氣泡均已排好序時,則仍需做n-1趟掃描才能完成排序。
【例】對初始關鍵字序列:94,10,12,18,42,44,45,67就需七趟掃描。 ②造成不對稱性的原因 每趟掃描僅能使最重氣泡下沉一個位置,因此使位於頂端的最重氣泡下沉到底部時,需做n-1趟掃描。 ③改進不對稱性的方法 在排序過程中交替改變掃描方向,可改進不對稱性。
Ⅶ 共3門學科,要求用C語言編程,輸入全班成績,並把它們的平均分進行排序,如何做到
#include<stdio.h>
#include<string.h>
#include<malloc.h>
#definestuNum3//假設全班學生3人太多我懶得輸,反正測試,你想改多少自己改
#definenameLen11//學科名稱的最大字元數我預設最多5個中文字不滿意自己改
typedefstructxueke
{
charxkName[nameLen];//學科名稱
floatxkp;//學科平均分
}XK;
intmain()
{
inty[stuNum],s[stuNum],w[stuNum],i,j;//定義語文數學外語三學科
intnumsave,sum[]={0,0,0};//記錄三科成績和
char*nameSave=(char*)malloc(sizeof(char)*nameLen);
XKxk[3];//記錄三科名稱及平均分
//錄入成績
printf("錄入%d名學生的語文成績:
",stuNum);
for(i=0;i<stuNum;i++)
{
scanf("%d",&y[i]);
sum[0]=sum[0]+y[i];
}
printf("錄入%d名學生的數學成績:
",stuNum);
for(i=0;i<stuNum;i++)
{
scanf("%d",&s[i]);
sum[1]=sum[1]+s[i];
}
printf("錄入%d名學生的外語成績:
",stuNum);
for(i=0;i<stuNum;i++)
{
scanf("%d",&w[i]);
sum[2]=sum[2]+w[i];
}
strcpy(xk[0].xkName,"語文");
xk[0].xkp=(float)sum[0]/stuNum;
strcpy(xk[1].xkName,"數學");
xk[1].xkp=(float)sum[1]/stuNum;
strcpy(xk[2].xkName,"外語");
xk[2].xkp=(float)sum[2]/stuNum;
for(i=0;i<3;i++)
{
for(j=i;j<3;j++)
{
if(xk[i].xkp<xk[j].xkp)//降序排列
{
numsave=xk[i].xkp;
memset(nameSave,0,nameLen);
strcpy(nameSave,xk[i].xkName);
xk[i].xkp=xk[j].xkp;
memset(xk[i].xkName,0,nameLen);
strcpy(xk[i].xkName,xk[j].xkName);
xk[j].xkp=numsave;
memset(xk[j].xkName,0,nameLen);
strcpy(xk[j].xkName,nameSave);
}
}
}
//列印
printf("降序排列
");
for(i=0;i<3;i++)
{
printf("學科:%s平均分:%.1f
",xk[i].xkName,xk[i].xkp);
}
}
Ⅷ 編程實現順序查找("哨兵"的使用)與折半查找(有序表)演算法.
順序查找
#include <stdio.h>
#include <stdlib.h>
#define MAX_LENGTH 100typedef int KeyType;
typedef struct {
KeyType *elem;
int length;
}SSTable; //順序表的存儲結構
int Search_Seq(SSTable ST, KeyType key){
int i;
ST.elem[0] = key; //「哨兵」,如果順序表中不存在要查找的數據的話,則查找指針必定指向該哨兵
for(i = ST.length; ST.elem[i] != key; i--)
;
return i; //找到的話,則i != 0,否則i = 0
}
void main()
{
int i, key;
SSTable T;
T.elem = (KeyType *)malloc(sizeof(KeyType));
printf("How Many Entries Do You Want input\n");
scanf("%d", &T.length);
for(i=1; i<=T.length; i++){
printf("Please input the %dth entries \n", i);
scanf("%d", &T.elem[i]);
}
for (i=1; i<=T.length; i++)
printf("%5d",T.elem[i]); //顯示已經輸入的所有數據
printf("\nPlease input the data you want to search\n");
scanf("%d", &key);
i = Search_Seq(T,key);
printf("the search data is locate the %dth(0 indicate can not find)\n",i);
}
折半查找
#include <stdio.h>
#include <stdlib.h>
int binSearch(const int *Array,int start,int end,int key)
{
int left,right;
int mid;
left=start;
right=end;
while (left<=right) {
mid=(left+right)/2;
if (key<Array[mid])
{
right=mid-1;
}
else if(key>Array[mid])
{
left=mid+1;
}
else
return mid;
}
return -1;
}
void main()
{
int A[]={10,20,30,40,50,60,70,80};
int n;
printf("Please search num:");
scanf("%d",&n);
int index=binSearch(A,0,8,n);
if(index==-1)
{
printf("no num");
}
else
{
printf("index=%d",index+1);
}
}
Ⅸ c語言編程問題
多開一個b[7] 數組放原來序號。
#include<stdio.h>
#include<stdlib.h>
void main()
{
int a[7] ={85,78,65,57,58,90,89};
int b[7]={0,1,2,3,4,5,6};
int i,j,tmp;
for (i=0;i<6;i++)
for (j=i+1;j<7;j++)
{
if (a[j] > a[i]) {
tmp=a[j];a[j]=a[i];a[i]=tmp;
tmp=b[j];b[j]=b[i];b[i]=tmp;
}
}
for (i=0;i<7;i++) printf("%d ",b[i]);
}
Ⅹ 編程里「哨兵」是什麼意思
就是 sentinel ,就是用來指定一個位置的特殊元素,比如 快速排序 裡面,需要選一個變數作為中間值,這個值就是一個 sentinel,又比如用來指示一個隊列尾部位置的變數