當前位置:首頁 » 編程語言 » c語言排序功能思路
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言排序功能思路

發布時間: 2022-09-26 01:15:21

1. c語言 輸入十個整數,從大到小排序,並輸出來。求解題思路

冒泡排序:

#include<stdio.h>

int main()

{ int a[10];

int i,j,t;

printf("input 10 numbers: ");

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

scanf("%d",&a[i]);//輸入10個數值

printf(" ");

for(j=0;j<9;j++) //進行9輪比較

for(i=0;i<9-j;i++) //每一輪中進行9-j次比較

if(a[i]<a[i+1]) //相鄰兩個數比較

{t=a[i];a[i]=a[i+1];a[i+1]=t;}

printf("output 10 numbers: ");

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

printf("%d ",a[i]); //按順序輸出10個數值

printf(" ");

return 0;

}

當然很多行可以省掉。只是這樣更清楚。

2. c語言排序的方法有多少種它們的核心思想是什麼

很多
按插入,直接插入排序、折半插入排序、希爾插入排序
按交換,冒泡排序、快速排序
按選擇,簡單選擇排序、堆排序
以及二路選擇排序、外部排序,還有很多

3. 一道C語言中關於鏈表排序的代碼的思路與步驟

/*代碼的整體思路是分為3個函數,一個建立鏈表,一個鏈表排序,最後一個是輸出鏈表,
而程序調用也是根據這個順序來調用的,詳細說明在下面*/
#include
#include
#define
LEN
sizeof(struct
number)
struct
number
{
int
num;
struct
number
*next;
};
int
n=0,sum=0;
void
main()
{
struct
number
*creat();
void
print(struct
number
*head);
struct
number
*change(struct
number
*head);
struct
number
*ahead;
ahead=creat();
sum+=n;
//sum計算結點的總數
change(ahead);
print(ahead);
}
struct
number
*creat()
//創建鏈表
{
struct
number
*p1,*p2,*head;
p1=p2=(struct
number*)malloc(LEN);
//LEN就是define定義的sizeof(struct
number)
printf("input
a
number,not
zero\n");
scanf("%d",&p1->num);
//將p1的num賦值為輸入的數
while(p1->num!=0)
//如果輸入的數不是0
{
n++;
//是記錄鏈表節點的數量
if(n==1)
//如果n是建立的第一個結點,也就是鏈表的頭
head=p1;
else
//否則p2的next指針指向p1,也就是原來鏈表最後一個結點的next指向新結點p1
p2->next=p1;
p2=p1;
//p2指向p1,每次p2都指向鏈表的結尾
p1=(struct
number*)malloc(LEN);
//申請內存,建立新結點
scanf("%d",&p1->num);
//再輸入號
}
p2->next
=NULL;
//將尾結點的next指針指向NULL
return
head;
//返回頭指針
}
struct
number
*change(struct
number
*head)
{
struct
number
*p,*h;
int
i;
for(i=1;i
next;p->next!=NULL;p=p->next,h=h->next)
//p指向頭結點,h指向p的後一個結點,每循環一次p和h都往後指一個結點
if(p->num>h->num)
//如果前面的結點比後面結點大,就交換,只交換num的值
{
int
t;
t=p->num;
p->num=h->num;
h->num=t;
}
return
head;
}
void
print(struct
number
*head)
//鏈表的便利,只便利num值
{
struct
number
*p;
p=head;
while(p!=NULL)
{
printf("%d",p->num
);
p=p->next
;
}
}

4. c語言中插入排序的基本思想是什麼

插入排序(Insertion sort)是一種簡單直觀且穩定的排序演算法。如果有一個已經有序的數據序列,要求在這個已經排好的數據序列中插入一個數,但要求插入後此數據序列仍然有序,這個時候就要用到一種新的排序方法——插入排序法,插入排序的基本操作就是將一個數據插入到已經排好序的有序數據中,從而得到一個新的、個數加一的有序數據,演算法適用於少量數據的排序,時間復雜度為O(n^2)。是穩定的排序方法。插入演算法把要排序的數組分成兩部分:第一部分包含了這個數組的所有元素,但將最後一個元素除外(讓數組多一個空間才有插入的位置),而第二部分就只包含這一個元素(即待插入元素)。在第一部分排序完成後,再將這個最後元素插入到已排好序的第一部分中。
插入排序的基本思想是:每步將一個待排序的記錄,按其關鍵碼值的大小插入前面已經排序的文件中適當位置上,直到全部插入完為止。

5. c語言選擇排序是怎麼實現的 思路是什麼

在要排序的一組數中,選出最小(或者最大)的一個數與第1個位置的數交換;然後在剩下的數當中再找最小(或者最大)的與第2個位置的數交換,依次類推,直到第n-1個元素(倒數第二個數)和第n個元素(最後一個數)比較為止。

簡單選擇排序的示例:

6. 用C語言編寫一個數據排序的程序,怎麼做啊。求給個思路

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<time.h>
voidbubble_sort(inta[],intn)
{
inti,j,temp;
for(j=0;j<n-1;j++)
{
for(i=0;i<n-1-j;i++)
{
if(a[i]>a[i+1])
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
}
}
}
intmain(void)
{
inti,n,*pdata;
intmin,max;
intmin_cnt=0,max_cnt=0;
scanf("%d",&n);
pdata=(int*)malloc(sizeof(int)*n);
if(pdata==NULL)
{
printf("動態內存分配失敗! ");
exit(0);
}
srand(time(NULL));
for(i=0;i<n;i++)
{
*(pdata+i)=rand()%60-10;
}
bubble_sort(pdata,n);
for(i=0;i<n;i++)
{
printf("%d ",*(pdata+i));
}
min=*(pdata+0);
max=*(pdata+n-1);
for(i=0;i<n;i++)
{
if(min>=*(pdata+i))
{
min_cnt++;
}
break;
}
for(i=n-1;i>=0;i--)
{
if(max<=*(pdata+i))
{
max_cnt++;
}
break;
}
printf("最高溫度%d出現次數%d ",max,max_cnt);
printf("最低溫度%d出現次數%d ",min,min_cnt);
getch();
return0;
}
/*圖形化界面需要你自己去研究了*/

7. C語言中選擇排序法具體是怎樣的

選擇排序的基本思想是:每一趟在n-i+1(i=1,2,…n-1)個記錄中選取關鍵字最小的記錄作為有序序列中第i個記錄。基於此思想的演算法主要有簡單選擇排序、樹型選擇排序和堆排序。
簡單選擇排序的基本思想:第1趟,在待排序記錄r[1]~r[n]中選出最小的記錄,將它與r[1]交換;第2趟,在待排序記錄r[2]~r[n]中選出最小的記錄,將它與r[2]交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢。

8. c語言,用選擇法對10個數排序,按正負數分開輸出

選擇排序:大循環i依次取元素和後面所有元素比較,找出其中最值,和當前i的元素交換。一次大循環交換一次。

程序思路:

一、排序函數:根據傳參,實現降序升序兩種功能。

二、數組輸出:根據傳參,實現正數和負數輸出兩種功能。

下面是代碼:


#include <stdio.h>

void px(int nums[],int len,int t);//排序

void showNums(int nums[],int len,int t);//輸出

int main()

{

int nums[10]={8,7,-1,2,-5,4,9,-3,-6,1};

printf("原數組:8,7,-1,2,-5,4,9,-3,-6,1 ");

printf("升序排列後: ");

px(nums,10,1);

printf("|---正數為:");

showNums(nums,10,1);

printf("|---負數為:");

showNums(nums,10,0);

//--------------------------------

printf("降序排列後: ");

px(nums,10,0);

printf("|---正數為:");

showNums(nums,10,1);

printf("|---負數為:");

showNums(nums,10,0);


}

void showNums(int nums[],int len,int t)//t=1輸出正數,t=0輸出負數

{

int i;

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

if((t && nums[i]>0)||(!t && nums[i]<0))

printf("%d ",nums[i]);

printf(" ");

}

void px(int nums[],int len,int t)//t=1升序,t=0降序

{

int i,j,k,m;

for(i=0;i<len-1;i++)

{

m=nums[i],k=i;

for(j=i+1;j<len;j++)

if((t && m>nums[j])||(!t && m<nums[j])) m=nums[j],k=j;

m=nums[i],nums[i]=nums[k],nums[k]=m;

}

}

9. c語言怎樣實現快速排序

include<stdio.h>

int arr_num[];
int length;

void quick_sort(int left, int right)
{
int i, j, c, temp;
if(left>right)
return;

i= left;
j= right;
temp = arr_num[i]

while(i != j)
{
while(arr_num[j]>=temp && i<j)
{
j--;
}

while(arr_num[i]<=temp && i<j)
{
i++;
}

if(i<j)
{
c = arr_num[i];
arr_num[i] = arr_num[j];
arr_num[j] = c;
}
}

//left為起始值(參照值)此時的I為第一次排序結束的最後值,與參照值交換位置
arr_num[left] = arr_num[i];
arr_num[i] = temp;

//繼續遞歸直到排序完成
quick_sort(left, i-1);
quick_sort(i+1, right);
}

int main()
{
int i;
length = 7;
arr_num[length] = {23, 7, 17, 36, 3, 61, 49}

//快速排序調用
quick_sort(0, length-1);

//輸出排序後的結果
for(i=1;i<=length;i++)
printf("%d ",arr_num[i]);
getchar();getchar();
return 0;
}

10. C語言,簡要講講選擇排序法的思路,內循環是每次都找此次最小的數么

很簡單,把整個數組分為兩個部分,前半部分為已排好序的數組,後半部分為待排序數組。一開始,前半部分長度為0,後半部分長度等於數組長度。然後,每次從後半部分中找出最大(最小)的數,將它加入到前半部分的尾部,後半部分長度減1,前半部分長度加1。重復上述過程,直到後半部分長度為0。