⑴ c語言中冒泡排序法和選擇排序法有哪些不同
1、冒泡排序法:一趟一趟的將兩個相鄰的數進行交換如果有10個數則需要排9躺,如果是從
大到小輸出則需要每次將後一個數和前一個數進行比較將較大的數賦值給錢一個數,將較小的數賦值給後一個數,其實就是兩個數交換,那麼第一趟交換完畢後,最
小的數便出現在了數組的最後面,然後進行第二趟的比較時則要對餘下的前9個數進行比較,9趟比較完成後則數組也已經排好序。
2、選擇排序法:10個數則是需要排9次,若按降序排列,第一次比較:則是將數組的第一個元素與數組中從第二個元素開始到最後的元素進行比較找到最大的數記錄下來然後將值賦值給數組的第一個元素,然後進行第二次比較:則是將數組的第二個元素與數組中從第三個元素開始到最後的元素進行比較,找最大的數記錄下來將值賦值給數組的第二個元素。。。依次循環找完
⑵ C語言中的選擇排序法是什麼
選擇排序(Selection sort)是一種簡單直觀的排序演算法。工作原理是每一次從待排序的數據元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數據元素排完。
以下是一個實現選擇排序的例子:
#defineSWAP(x,y,t)((t)=(x),(x)=(y),(y)=(t))
//將list中的n個數據,通過選擇排序演算法排序。
voidselete_sort(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);//交換最小元素到當前起始位置。
}
}
⑶ C語言中有哪些排序法,可以說出並寫出一些示常式序么
排序法並不是C語言才有的,應該是屬於一種演算法,常見的有 冒泡排序,選擇排序 插入排序,快速排序,堆排序 等
給你兩種簡單的排序的例子吧
選擇
#include "stdio.h"
void sort(int x[],int n)
{
int t,i,j,k;
for(i=0;i<n-1;i++)
{
k=0;
for(j=0;j<n-1-i;j++)
if(x[k]<x[j+1])
k=j+1;
t=x[k];
x[k]=x[n-1-i];
x[n-1-i]=t;
}
}
void main()
{
int a[10],i,*p;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
p=a;
sort(p,10);
for(p=a,i=0;i<10;i++)
{
printf("%d ",*p);
p++;
}
}
冒泡
#include "stdio.h"
void sort(int x[],int n)
{
int i,j,p;
for(i=0;i<n;i++)
for(i=0;i<n;i++)
for(j=0;j<n-1-i;j++)
{
if(x[j]<x[j+1])
{
p=x[j];
x[j]=x[j+1];
x[j+1]=p;
}
}
}
void main()
{
int a[10],i,*p;
for(i=0;i<10;i++)
scanf("%d",&a[i]);
p=a;
sort(p,10);
for(p=a,i=0;i<10;i++)
{
printf("%d ",*p);
p++;
}
}
⑷ c語言排序演算法
#include<stdio.h>
#defineN100000//定義最多輸入的數據
intsort(int*a,intn){
inti,j,m;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(a[i]>a[j]){
m=a[i];a[i]=a[j];a[j]=m;
}
return0;
}
intmain(){
inta[N];
inti=0,n,ii;
while(1){
//printf("輸入n ");
scanf("%d",&n);
a[i++]=n;
if(n==0)break;
ii=i;
for(;i<n+ii;i++)
scanf("%d",&a[i]);
}
i=0;
while(a[i]!=0){
sort(a+i+1,a[i]);
for(n=1;n<=a[i];n++)
printf("%d",a[i+n]);
printf(" ");
i=i+a[i]+1;
}
}
⑸ c語言排序法
排序法主要有冒泡法和選擇法,給你舉個冒泡法的例子吧:對10個數排序(最組要的部分)
for(j=0;j<9;j++) /*進行9次循環,實現9次比較*/
for(i=0;i<9-j;i++)/*在每一趟中進行9-i次比較*/
if(a[i]>a[i+1])/*相鄰兩個數的比較*/
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
⑹ c語言中排序的方法有哪些
排序演算法和語言沒有什麼關系,一般來說面試,考試就是那些
快速排序
冒泡排序
堆排序
⑺ c語言中常用的排序方法特點以及計算量是多少
冒泡O(N^2)
快排O(NLOGN)
⑻ C語言中有哪些經典的排序方法
選擇排序的原理是,每次從待排序數字中挑選出最大(最小)數字,放在有序序列的末尾。實際操作中,只需要在這個數組中將挑出來的數字與前面的數字交換即可。
例如:
4
1 5
2 3
找到最小的1,1和4交換
1
4 5
2
3
找到最小的2,2和4交換
1
2
5
4
3
找到最小的3,3和5交換
1
2
3
4
5
找到最小的4,4和4交換(不交換也可)
可見,選擇排序需要一個雙重循環來完成,因此它的復雜度是o(n^2)
在數據量比較大時,不建議使用這種排序方法。
其他排序方法有很多,你甚至可以自己根據不同數據規模設計不同的排序方法。比較常見的有冒泡排序,插入排序(這兩種和選擇排序一樣,都是o(n^2)),二分法插入排序(降低了一些復雜度,但是涉及到大規模數據移動,效率依然不高),快速排序(平均復雜度o(nlogn),但是不穩定,最壞情況o(n^2)),隨機化快速排序(很大程度上避免了最壞情況的出現),堆排序(o(nlogn),編程復雜度高),基數排序(理論復雜度o(n),實際要比這個慢。甚至能應付字元串排序,但是編程復雜度高,牽扯到其他數據結構),桶排序(o(n),編程簡單,效率高,但是應付的數據范圍不能太大,受到內存大小的限制)。
平時比較常用的就是快速排序,程序簡單,效率也可以接受。
這是我了解的一些東西,希望對你有幫助。
⑼ C語言選擇法排序
#include<stdio.h>
#defineM 5
void main()
{
int b[M],i,j,t,k;
for(i=0;i<M;i++)
scanf("%d",&b[i]);
for(i=0;i<M-1;i++)
{
for(k=i,j=i+1;j<M;j++)
if(b[k]<b[j])
k=j;
if(i!=k)
{
t=b[i];
b[i]=b[k];
b[k]=t;
}
}
for(i=0;i<M;i++)
printf("%d ",b[i]);
}
錯在大括弧位置加錯了。
代碼:
#include<stdio.h>
void SelectionSort(int *num,int n)
{
int i = 0;
int min = 0;
int j = 0;
int tmp = 0;
for(i = 0;i < n-1;i++)
{
min = i;//每次講min置成無序組起始位置元素下標
for(j = i;j < n;j++)//遍歷無序組,找到最小元素。
{
if(num[min]>num[j])
{
min = j;
}
}
if(min != i)//如果最小元素不是無序組起始位置元素,則與起始元素交換位置
{
tmp = num[min];
num[min] = num[i];
num[i] = tmp;
}
}
}
(此處空一行)
int main()
{
int num[6] = {5,4,3,2,9,1};
int i = 0;
SelectionSort(num,6);//這里需要將數列元素個數傳入。有心者可用sizeof在函數內求得元素個數。
for(i = 0;i < 6;i++)
{
printf("%d ",num[i]);
}
return 0;
}