亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

詳解Java之冒泡排序與選擇排序

 更新時(shí)間:2022年01月10日 09:04:30   作者:小夏跑不死  
這篇文章主要為大家介紹了Java之冒泡排序與選擇排序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

一.冒泡排序

1.概念

冒泡排序這種排序方法其實(shí)關(guān)鍵詞就在于冒泡兩個(gè)字,顧名思義就是數(shù)字不斷比較然后最大的突出來,也就是說把相鄰的兩個(gè)數(shù)字兩兩比較,當(dāng)一個(gè)數(shù)字大于右側(cè)相鄰的數(shù)字時(shí),交換他們的位置,當(dāng)一個(gè)數(shù)字和他右側(cè)的數(shù)字小于或等于的時(shí)候,不交換。

2.圖解

關(guān)于冒泡排序我自己畫了一幅圖來描述他的一輪過程

這里我舉了五個(gè)無序的數(shù){7,3,6,5,4}

由此可看出他不斷與右側(cè)相鄰的數(shù)字進(jìn)行比較,當(dāng)他大于右邊的數(shù)字就交換,否則不交換,就用這種方法不斷進(jìn)行排序進(jìn)行很多輪,最后得出一個(gè)有序的序列{2,4,5,6,7}。

3.代碼的思路

冒泡循環(huán)是一種有序的序列,有上圖我們不難看出冒泡循環(huán)一輪需要進(jìn)n-1次比較然后開啟下一層,而且你一輪比較完了之后最后一個(gè)最大的數(shù)就不用再參與比較循環(huán)了,所以下一次的循環(huán)可以減少一次。

因此我的思路是利用兩次for循環(huán),一次循環(huán)來當(dāng)取第二次循環(huán)的次數(shù),然后依次減少第二次for循環(huán)的次數(shù),簡(jiǎn)便了很多過程,然后數(shù)組兩個(gè)相鄰的數(shù)字進(jìn)行依次比較,大于右邊的也就是大于下一位的交換位置,否則不交換,所以我的兩個(gè)for循環(huán)的代碼如下(其實(shí)這也算是個(gè)萬能代碼,就冒泡循環(huán)這一塊)當(dāng)然i,k,b都需要來定義的,n為比較序列中元素個(gè)數(shù)。

這個(gè)代碼也用了兩次for循環(huán)所以我們不難推算出時(shí)間復(fù)雜度為o(n^2)

for(i=0;i<n-1;i++)
{ 
 for(k=0;k<n-1-i;k++)
   { if(a[k]>a[k+1])
     { b=a[k];
       a[k]=a[k+1];
       a[k+1]=b; 
      }//交換a[k]與a[k+1]位置            
     }
 }

4.代碼例子

我自己也寫了一個(gè)代碼,輸入a[10]序列的數(shù)字,然后冒泡循環(huán)進(jìn)行排序來實(shí)現(xiàn)

#include<stdio.h>
int main()
{
	int a[10], i, j, b, k;
	for (i = 0; i < 10;i++)
	{
		printf("輸入第%d個(gè)數(shù)為:", i+1);
		scanf_s("%d", &a[i]);
   }
	for (k = 0; k < 9; k++)//外部循環(huán)
	   		for (i = 0; i < 9 - k; i++)//內(nèi)部循環(huán)
			if(a[i] > a[i + 1])//
			{
				b = a[i];
				a[i]= a[i + 1];
				a[i + 1] = b;
			}
		
	printf("排出序列為:");
	for(i = 0; i < 10; i++)
		printf("%d ", a[i]);
	return 0;
}

最后運(yùn)行也是成功的

二.選擇排序

1.概念

選擇循環(huán)的主要是選擇,選擇一個(gè)元素去進(jìn)行比較,假如這個(gè)數(shù)比他小,換成嘞個(gè)數(shù)繼續(xù)比較,最后找出最小值與數(shù)組第一位的數(shù)進(jìn)行交換。然后一直這樣循環(huán)下去,直到代碼排序完成。也就是通過一個(gè)中間量從帶排序的的數(shù)中找出最大或最小的交換到對(duì)應(yīng)位置。

2.圖解

關(guān)于選擇排序我自己花了一幅圖來描述他的一輪比較

我用了五個(gè)無序數(shù)來做例子{2,1,4,-3,3}

由此可以看出選擇比較的過程,這里我用指針代指了需要的中間量,剛開始指針指向2,然后2去比較,1<2,所以指針指向較小值,指針指向1,最后就這樣找出-3為最小值和第一個(gè)交換,得到第一輪循環(huán)比較的數(shù)列{-3,1,4,2,3}。

3.代碼的思路

其實(shí)觀察上圖一輪循環(huán)次數(shù)還有循環(huán)完一輪之后,不需要用最小值比較可以看出其實(shí)他和冒泡循環(huán)有點(diǎn)相似,都是循環(huán)一輪需要進(jìn)n-1次比較然后開啟下一層,而且下一次循環(huán)可以減少一次。

所以我的思路是,依然運(yùn)用兩次for循環(huán),與冒泡循環(huán)不同的是我需要一個(gè)中間商,所以我可以引用一個(gè)局部變量來幫助我,這個(gè)局部變量就是圖解的指針,局部變量就是數(shù)組對(duì)應(yīng)元素的位置,不斷進(jìn)行比較,當(dāng)他小于一個(gè)數(shù)時(shí),他就等于嘞個(gè)數(shù)的位置數(shù),繼續(xù)比較,直到循環(huán)結(jié)束找出最小值,最小值跟第一位換位置,一次循環(huán)直到排出有序序列為止。所以代碼如下

for(i=o;i<n-1:i++)//循環(huán)數(shù)列取得數(shù)開始依次比較
{ 
  int x=i;//x為中間商
  for(k=i+1;k<n;k++)//從循環(huán)數(shù)列取得數(shù)后一位開始循環(huán)數(shù)列取得數(shù)進(jìn)行依次比較
    {
      if(a[x]>a[k])//得出最小值
        k=x;
        if(x!=i)//將得到的最小值跟最前面的數(shù)字進(jìn)行交換
        { t=a[i];
          a[i]=a[x];
          a[x]=t;
        }
     }
 }

這也是一個(gè)萬能代碼可以用在選擇序列上。

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Java加密解密和數(shù)字簽名完整代碼示例

    Java加密解密和數(shù)字簽名完整代碼示例

    這篇文章主要介紹了Java加密解密和數(shù)字簽名完整代碼示例,具有一定參考價(jià)值,需要的朋友可以了解下。
    2017-12-12
  • Java API方式調(diào)用Kafka各種協(xié)議的方法

    Java API方式調(diào)用Kafka各種協(xié)議的方法

    本篇文章主要介紹了Java API方式調(diào)用Kafka各種協(xié)議的方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-09-09
  • spring?jpa集成依賴的環(huán)境準(zhǔn)備及實(shí)體類倉(cāng)庫(kù)編寫教程

    spring?jpa集成依賴的環(huán)境準(zhǔn)備及實(shí)體類倉(cāng)庫(kù)編寫教程

    這篇文章主要為大家介紹了spring?jpa集成依賴的環(huán)境準(zhǔn)備及實(shí)體類倉(cāng)庫(kù)編寫教程,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-03-03
  • SpringBoot3集成Redis的方法詳解

    SpringBoot3集成Redis的方法詳解

    緩存在項(xiàng)目開發(fā)中,基本上是必選組件之一,Redis作為一個(gè)key-value存儲(chǔ)系統(tǒng),具備極高的數(shù)據(jù)讀寫效率,并且支持的數(shù)據(jù)類型比較豐富,下面我們就來看看SpringBoot3是如何集成Redis的吧
    2023-08-08
  • SpringBoot中的Future接口詳解

    SpringBoot中的Future接口詳解

    這篇文章主要介紹了SpringBoot中的Future接口詳解,在異步編程中,我們通常需要處理一些耗時(shí)的操作,一種常見的做法是使用 Future 接口來代表一個(gè)異步操作的結(jié)果,需要的朋友可以參考下
    2023-07-07
  • Java實(shí)現(xiàn)動(dòng)態(tài)代理

    Java實(shí)現(xiàn)動(dòng)態(tài)代理

    本文給大家介紹的是java使用動(dòng)態(tài)代理類實(shí)現(xiàn)動(dòng)態(tài)代理的方法和示例,這里推薦給大家,有需要的小伙伴參考下吧
    2015-02-02
  • Java 方法簽名詳解及實(shí)例代碼

    Java 方法簽名詳解及實(shí)例代碼

    這篇文章主要介紹了 Java 方法簽名詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2016-10-10
  • Java數(shù)據(jù)結(jié)構(gòu)之選擇排序算法的實(shí)現(xiàn)與優(yōu)化

    Java數(shù)據(jù)結(jié)構(gòu)之選擇排序算法的實(shí)現(xiàn)與優(yōu)化

    選擇排序:(Selection?sort)是一種簡(jiǎn)單直觀的排序算法,也是一種不穩(wěn)定的排序方法。本文主要為大家介紹一下選擇排序的實(shí)現(xiàn)與優(yōu)化,希望對(duì)大家有所幫助
    2023-01-01
  • SpringBoot中EasyExcel實(shí)現(xiàn)execl導(dǎo)入導(dǎo)出

    SpringBoot中EasyExcel實(shí)現(xiàn)execl導(dǎo)入導(dǎo)出

    本文主要介紹了SpringBoot中EasyExcel實(shí)現(xiàn)execl導(dǎo)入導(dǎo)出,實(shí)現(xiàn)了如何準(zhǔn)備環(huán)境、創(chuàng)建實(shí)體類、自定義轉(zhuǎn)換器以及編寫導(dǎo)入邏輯的步驟和示例代碼,感興趣的可以了解下
    2023-06-06
  • 詳解SpringMVC的攔截器參數(shù)及攔截器鏈配置

    詳解SpringMVC的攔截器參數(shù)及攔截器鏈配置

    攔截器(Interceptor)是一種動(dòng)態(tài)攔截方法調(diào)用的機(jī)制,在SpringMVC中動(dòng)態(tài)攔截控制器方法的執(zhí)行。本文將詳細(xì)講講SpringMVC中攔截器參數(shù)及攔截器鏈配置,感興趣的可以嘗試一下
    2022-07-07

最新評(píng)論