當前位置:首頁 » 編程語言 » c語言指針冒泡排序

c語言指針冒泡排序

發布時間: 2022-10-09 18:46:09

c語言 指針的方法 對一維數組進行 冒泡排序

大概思路:用指針p指向數組的首地址,用指針去引用數組中的各個元素,並對數組中各個元素就行運算和比較操作了,代碼可以參照如下:
#include
<stdio.h>
#include
<stdlib.h>
int
main()
{
int
array[5];
int
i,j,*p,temp;
p=array;
printf("please
input
some
integer:\n");
for(i=0;i<5;i++)
{
scanf("%d",p++);
}
p=array;
printf("排序前為:\n");
for(i=0;i<5;i++)
{
printf("%-5d",*p++);
}
p=array;
for(i=0;i<4;i++)
{
for(j=0;j<4-i;j++)
{
if(*(p+j)>*(p+j+1))
//用指針去引用數組中的元素並進行比較
{
temp=*(p+j);
*(p+j)=*(p+j+1);
*(p+j+1)=temp;
}
}
}
printf("排序之後:\n");
for(i=0;i<5;i++)
{
printf("%-5d",*p++);
}
return
0;
}

Ⅱ c語言冒泡排序是什麼

冒泡排序(Bubble Sort),是一種計算機科學領域的較簡單的排序演算法
它重復地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重復地進行直到沒有再需要交換,也就是說該數列已經排序完成。
這個演算法的名字由來是因為越大的元素會經由交換慢慢「浮」到數列的頂端,故名。

演算法原理編輯
冒泡排序演算法的運作如下:(從後往前)

比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重復以上的步驟,除了最後一個。

持續每次對越來越少的元素重復上面的步驟,直到沒有任何一對數字需要比較
#include<stdio.h>
#define SIZE 8

voidbubble_sort(inta[],intn);

voidbubble_sort(inta[],intn)//n為數組a的元素個數
{
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()
{
intnumber[SIZE]={95,45,15,78,84,51,24,12};
inti;
bubble_sort(number,SIZE);
for(i=0;i<SIZE;i++)
{
printf("%d",number[i]);
}
printf("\n");
}

Ⅲ c語言用指針進行冒泡排序

根據我多年的 C 語言編程經驗,如果能夠少用(或者不用)指針的地方,那麼盡量還是不要使用指針,可以通過別的方法實現相同功能。例如:你這個冒泡排序程序,如果需要處理的數據量不大,你就可以使用數組下標來實現。具體的源程序,現在市面上關於數據結構的書籍裡面都會有各種具體排序(包括:順序檢索、二分搜索等)的源程序供參考。
雖然說 C 語言的指針功能相當強大,但同時也是最難於調試的地方。如果真的是需要處理的數據量相當巨大時,那麼也不是定義幾個指針變數就能夠解決問題的,那就必須要從計算機的數據結構和軟體演算法上進行根本的改進了。

Ⅳ c語言中冒泡排序的實現原理是什麼

冒泡排序(BubbleSort)的基本概念是:依次比較相鄰的兩個數,將小數放在前面,大數放在後面。即在第一趟:首先比較第1個和第2個數,將小數放前,大數放後。然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後。至此第一趟結束,將最大的數放到了最後。在第二趟:仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後,一直比較到倒數第二個數(倒數第一的位置上已經是最大的),第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。如此下去,重復以上過程,直至最終完成排序。
由於在排序過程中總是小數往前放,大數往後放,相當於氣泡往上升,所以稱作冒泡排序。
用二重循環實現,外循環變數設為i,內循環變數設為j。外循環重復9次,內循環依次重復9,8,...,1次。每次進行比較的兩個元素都是與內循環j有關的,它們可以分別用a[j]和a[j+1]標識,i的值依次為1,2,...,9,對於每一個i,
j的值依次為1,2,...10-i

Ⅳ c語言冒泡排序

第一個for是代表從數組的 第前一個元素(設為j)循環到數組最後一個元素。
第二個for代表從j+1個(也就是第j+1個元素到最後一個元素,每一個元素和第j個比較大小,然後換位。
舉個例子:比如現在是for到第一個元素,然後第二個for到的第一個的後一個(就是第二個)進行比較,然後換元素。
有什麼不懂再問喔

Ⅵ c語言。編寫一個冒泡排序演算法s使用指針將n個整型數據按升序排序

#include<stdio.h>

int main()

{

int a[111],t;

int *p=a;

int n;

scanf("%d",&n);

for(p=a;p<a+n;p++)

scanf("%d",p);

p=a;

for(int i=0;i<n;i++)

for(int j=0;j<n-1-i;j++)

if(p[j]>p[j+1])

{

t=p[j];

p[j]=p[j+1];

p[j+1]=t;

}

for(int i=0;i<n;i++)

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

return 0;

}

——————————————————————

#include<stdio.h>

#include<malloc.h>

#include<string.h>

int main()

{

char *p[30];

for(int i=0;i<5;i++)

{

p[i]=(char*)malloc(30*sizeof(char));

//使用指針變數時要先為其分配空間

gets(p[i]);

}

for(int i=0;i<5;i++)

puts(p[i]);

return 0;

}

Ⅶ C語言冒泡排序法

冒泡排序每一趟排序把最大的放在最右邊。

比如:

87 12 56 45 78

87和12交換:12 87 56 45 78

87和56交換: 56 87 45 78

87和45交換: 45 87 78

87和78交換: 78 87

到此第一趟排序結束,接下來的每一趟排序都是這樣。

#include<stdio.h>
voidPrint(int*num,intn)
{
inti;
for(i=0;i<n;i++)
printf("%d",num[i]);
puts(" ");
return;
}
voidBubble_Sort(int*num,intn)
{
inti,j;
for(i=0;i<n;i++)
{
for(j=0;i+j<n-1;j++)
{
if(num[j]>num[j+1])
{
inttemp=num[j];
num[j]=num[j+1];
num[j+1]=temp;
}
Print(num,n);
}
}
return;
}
intmain()
{
intnum[8]={87,12,56,45,78};
Bubble_Sort(num,5);
return0;
}

Ⅷ C語言冒泡排序原理

經典排序演算法 - 冒泡排序Bubble sort
原理是臨近的數字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,
這樣一趟過去後,最大或最小的數字被交換到了最後一位,
然後再從頭開始進行兩兩比較交換,直到倒數第二位時結束,其餘類似看例子
例子為從小到大排序,
原始待排序數組| 6 | 2 | 4 | 1 | 5 | 9 |

第一趟排序(外循環)
第一次兩兩比較6 > 2交換(內循環)
交換前狀態| 6 | 2 | 4 | 1 | 5 | 9 |
交換後狀態| 2 | 6 | 4 | 1 | 5 | 9 |

第二次兩兩比較,6 > 4交換
交換前狀態| 2 | 6 | 4 | 1 | 5 | 9 |
交換後狀態| 2 | 4 | 6 | 1 | 5 | 9 |

第三次兩兩比較,6 > 1交換
交換前狀態| 2 | 4 | 6 | 1 | 5 | 9 |
交換後狀態| 2 | 4 | 1 | 6 | 5 | 9 |

第四次兩兩比較,6 > 5交換
交換前狀態| 2 | 4 | 1 | 6 | 5 | 9 |
交換後狀態| 2 | 4 | 1 | 5 | 6 | 9 |

第五次兩兩比較,6 < 9不交換
交換前狀態| 2 | 4 | 1 | 5 | 6 | 9 |
交換後狀態| 2 | 4 | 1 | 5 | 6 | 9 |

第二趟排序(外循環)
第一次兩兩比較2 < 4不交換
交換前狀態| 2 | 4 | 1 | 5 | 6 | 9 |
交換後狀態| 2 | 4 | 1 | 5 | 6 | 9 |

第二次兩兩比較,4 > 1交換
交換前狀態| 2 | 4 | 1 | 5 | 6 | 9 |
交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |

第三次兩兩比較,4 < 5不交換
交換前狀態| 2 | 1 | 4 | 5 | 6 | 9 |
交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |

第四次兩兩比較,5 < 6不交換
交換前狀態| 2 | 1 | 4 | 5 | 6 | 9 |
交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |

第三趟排序(外循環)
第一次兩兩比較2 > 1交換
交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |

第二次兩兩比較,2 < 4不交換
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |

第三次兩兩比較,4 < 5不交換
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |
交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |

第四趟排序(外循環)無交換
第五趟排序(外循環)無交換

排序完畢,輸出最終結果1 2 4 5 6 9

#include <stdio.h>
int main()
{
int i,j,temp;
int a[6]={6,2,4,1,5,9}; //6個元素
for(j=0;j<5;j++) //共進行5輪外循環
{ for (i=0;i<5-j;i++) //每輪內循環結束時,第(j+1)大的數排到正確的位置上(沉底)
if (a[i]>a[i+1]) //每次比較相信的二個數,若大小順序不對,就交換它們相互位置
{ temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;}
}
for(i=1;i<6;i++) //輸出排序後的所有元素
printf("%3d,",a[i] );
printf("\n");
return 0;
}

Ⅸ C語言冒泡排序法是什麼

冒泡排序法,是C語言常用的排序演算法之一,意思是對一組數字進行從大到小或者從小到大排序的一種演算法。

具體方法是:

相鄰數值兩兩交換。從第一個數值開始,如果相鄰兩個數的排列順序與我們的期望不同,則將兩個數的位置進行交換(對調);如果其與我們的期望一致,則不用交換。重復這樣的過程,一直到最後沒有數值需要交換,則排序完成。

C語言常見的排序演算法:

1、冒泡排序

基本思想:比較相鄰的兩個數,如果前者比後者大,則進行交換。每一輪排序結束,選出一個未排序中最大的數放到數組後面。

2、快速排序

基本思想:選取一個基準元素,通常為數組最後一個元素(或者第一個元素)。從前向後遍歷數組,當遇到小於基準元素的元素時,把它和左邊第一個大於基準元素的元素進行交換。在利用分治策略從已經分好的兩組中分別進行以上步驟,直到排序完成。

3、直接插入排序

基本思想:和交換排序不同的是它不用進行交換操作,而是用一個臨時變數存儲當前值。當前面的元素比後面大時,先把後面的元素存入臨時變數,前面元素的值放到後面元素位置,再到最後把其值插入到合適的數組位置。

4、直接選擇排序

基本思想:依次選出數組最小的數放到數組的前面。首先從數組的第二個元素開始往後遍歷,找出最小的數放到第一個位置。再從剩下數組中找出最小的數放到第二個位置。以此類推,直到數組有序。

以上內容參考 網路-排序演算法、網路-c語言冒泡排序


熱點內容
解壓游戲香皂 發布:2024-12-22 16:49:29 瀏覽:352
新預演算法的亮點 發布:2024-12-22 16:36:30 瀏覽:959
linux命令行快捷鍵 發布:2024-12-22 16:33:27 瀏覽:10
淘寶網怎麼上傳寶貝 發布:2024-12-22 16:30:53 瀏覽:753
伺服器gps是什麼意思 發布:2024-12-22 16:10:43 瀏覽:996
iqoo安卓11變聲器在哪裡 發布:2024-12-22 15:46:45 瀏覽:252
ie鎖定初始密碼在哪裡找 發布:2024-12-22 15:44:48 瀏覽:296
linuxtcp窗口 發布:2024-12-22 15:34:24 瀏覽:948
安卓官翻機和原裝有什麼區別 發布:2024-12-22 15:34:24 瀏覽:662
linux掛載的磁碟 發布:2024-12-22 15:34:23 瀏覽:234