搜尋
首頁後端開發C++對一個包含兩種類型元素的陣列進行排序
對一個包含兩種類型元素的陣列進行排序Sep 02, 2023 pm 02:21 PM
陣列元素排序

對一個包含兩種類型元素的陣列進行排序

有不同的方法來對只包含兩個元素(即只有1和0)的陣列進行排序。我們將討論三種不同的方法來實現這個目標。第一種方法簡單地使用預先定義的sort()函數對給定的陣列進行排序。第二種方法是計數排序方法,我們將計算0和1的數量,然後透過先寫入0的次數來更新數組,然後寫入1的次數。在最後一種方法中,我們使用了雙指標方法。

問題陳述

我們被給定一個只包含1和0的陣列。我們的任務是將所有的0和1排列,使得1在陣列的最右邊,0在陣列的左邊

Example

的中文翻譯為:

範例

Given array: a[] = [ 1, 1, 0, 1, 0, 1, 0, 1 ]
Resultant array: a[] = [ 0, 0, 0, 1, 1, 1, 1, 1 ]

方法一:暴力破解法。

在此方法中,我們將直接使用 sort() 函數對陣列進行排序。由於1>0,排序後,所有1都會排列在數組的右側,所有0都會排列在左側。

Sort() 函數:Sort() 函數需要 O(NlogN) 時間並以升序傳回陣列。

Example

的中文翻譯為:

範例

下面是一個C 實現,用於對包含兩種類型元素的數組進行排序。

#include <bits/stdc++.h>
using namespace std;
int main(){
   int a[] = { 1, 1, 0, 1, 0, 1, 0, 1 };
   int len = sizeof(a) / sizeof( a[0] );
   
   // sort function to
   // sort the array
   sort( a, a + len);
   cout<< " After sorting the array, the array obtained is ";
   for(int iterator =0; iterator<len; iterator++){
      cout << a[iterator] <<" ";
   }
   return 0;
}

輸出

在編譯時,上述程式將產生以下輸出 -

After sorting the array, the array obtained is 0 0 0 1 1 1 1 1

方法2:計數排序方法

在這個方法中,我們將簡單地計算數組中 0 和 1 的數量,然後更新數組,其中 0 位於開頭,1 位於最後。

透過這樣做,我們將在數組的最左邊部分擁有所有的0,並在數組的最右邊部分擁有所有的1,這將自動表示所需的排序數組。

這是一種簡單的方法,但它會向數組中插入新的值,而不僅僅是交換它們的位置,因此這種方法不高效。

Example

的中文翻譯為:

範例

以下是使用 C 實作上述方法。

#include <iostream>
using namespace std;
int main() {
   int count = 0 ;
   int a[] = { 1, 1, 0, 1, 0, 1, 0, 1 };
   int len = sizeof(a) / sizeof(a[0]);
   for(int iterator=0; iterator<len; iterator++){
      if( a[iterator] == 0 )
      count++;
   }
   for(int iterator=0 ; iterator<len ; iterator++){
      if(count){
         a[iterator] = 0 ;
         count-- ;
      }
      else a[iterator] = 1;
   }
   cout<< " After sorting the array, the array obtained is ";
   for(int iterator =0 ; iterator<len ; iterator++){
      cout<< a[iterator] << " ";
   }
   return 0;
}

輸出

編譯時,它將產生以下輸出 -

After sorting the array, the array obtained is 0 0 0 1 1 1 1 1

時間複雜度 - 由於我們只使用了一個循環,所以這個方法的時間複雜度為O(N)

空間複雜度 - O(1)。雖然我們使用了額外的變量,但由於它們是線性的,所以空間複雜度是常數。

方法 3:解決此問題的最佳方法

在這種方法中,我們將保留兩個指針,即start和end。我們將同時使用start指標從陣列的開頭(索引為0)開始遍歷,並使用end指標從末尾(索引為len-1)開始遍歷。

我們的任務是將所有的1排列到陣列的最右邊,這將自動將所有的0排列到陣列的左邊。

我們從初始索引開始,如果找到的元素為 1,我們將與索引「end」處的元素交換它,並將結束指標遞減 1。

如果找到的元素是0,那麼就不需要執行任何交換操作,因為它已經在最左邊的位置,我們只需將起始指標增加1即可。

Example

的中文翻譯為:

範例

以下是實作此方法的程式碼 -

#include <bits/stdc++.h>
using namespace std;
int main(){
   int start =0 ;
   int a[] = { 1, 1, 0, 1, 0, 1, 0, 1 } ;
   int len = sizeof(a) / sizeof( a[0] ) ;
   int end = len-1;
   while(start < end){
      if( a[start] ==1){
         swap(a[start], a[end]);
         end--;
      }
      else
         start++;
   }
   cout<< " After sorting the array, the array obtained is ";
   for(int iterator =0 ; iterator<len ; iterator++){
      cout<< a[iterator] << " ";
   }
   return 0;
}

輸出

After sorting the array, the array obtained is 0 0 0 1 1 1 1 1

時間複雜度 - 由於我們只遍歷數組一次,因此這種方法的時間複雜度是線性的,即 O(N)

空間複雜度 − 由於我們沒有使用任何額外的空間,所以空間複雜度為 O(1)。

結論

在本文中,我們討論了三種不同的方法來對僅包含兩種類型元素(即僅 1 和 0)的陣列進行排序。

以上是對一個包含兩種類型元素的陣列進行排序的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:tutorialspoint。如有侵權,請聯絡admin@php.cn刪除
在JavaFX中,有哪些不同的路径元素?在JavaFX中,有哪些不同的路径元素?Aug 28, 2023 pm 12:53 PM

javafx.scene.shape包提供了一些类,您可以使用它们绘制各种2D形状,但这些只是原始形状,如直线、圆形、多边形和椭圆形等等...因此,如果您想绘制复杂的自定义形状,您需要使用Path类。Path类Path类使用此表示形状的几何轮廓您可以绘制自定义路径。为了绘制自定义路径,JavaFX提供了各种路径元素,所有这些都可以作为javafx.scene.shape包中的类使用。LineTo-该类表示路径元素line。它可以帮助您从当前坐标到指定(新)坐标绘制一条直线。HlineTo-这是表

C++程序:向数组中添加一个元素C++程序:向数组中添加一个元素Aug 25, 2023 pm 10:29 PM

数组是一种线性顺序数据结构,用于在连续的内存位置中保存同质数据。与其他数据结构一样,数组也必须具备以某种有效方式插入、删除、遍历和更新元素的功能。在C++中,我们的数组是静态的。C++中还提供了一些动态数组结构。对于静态数组,该数组内可能存储Z个元素。到目前为止,我们已经有n个元素了。在本文中,我们将了解如何在C++中在数组末尾插入元素(也称为追加元素)。通过示例理解概念‘this’关键字的使用方式如下GivenarrayA=[10,14,65,85,96,12,35,74,69]Afterin

html5不支持哪些元素html5不支持哪些元素Aug 11, 2023 pm 01:25 PM

html5不支持的元素有纯表现性元素、基于框架的元素、应用程序元素、可替换元素和旧的表单元素。详细介绍:1、纯表现性的元素,如font、center、s、u等,这些元素通常被用于控制文本样式和布局;2、基于框架的元素,如frame、frameset和noframes,这些元素在过去用于创建网页布局和分割窗口;3、应用程序相关的元素,如applet和isinde等等。

jquery怎么移除 元素jquery怎么移除 元素Feb 17, 2023 am 09:49 AM

jquery移除元素的方法:1、通过jQuery remove()方法删除被选元素及其子元素,语法是“$("#div1").remove();”;2、通过jQuery empty()方法删除被选元素的子元素,语法是“$("#div1").empty();”。

如何使用HTML和CSS实现一个具有固定导航菜单的布局如何使用HTML和CSS实现一个具有固定导航菜单的布局Oct 26, 2023 am 11:02 AM

如何使用HTML和CSS实现一个具有固定导航菜单的布局在现代网页设计中,固定导航菜单是常见的布局之一。它可以使导航菜单始终保持在页面顶部或侧边,使用户可以方便地浏览网页内容。本文将介绍如何使用HTML和CSS实现一个具有固定导航菜单的布局,并提供具体的代码示例。首先,需要创建一个HTML结构来呈现网页的内容和导航菜单。以下是一个简单的示例

如何在Java中删除ArrayList的所有元素?如何在Java中删除ArrayList的所有元素?Sep 20, 2023 pm 02:21 PM

List接口扩展了Collection接口并存储元素序列。List接口提供了两种方法来有效地在列表中的任意点插入和删除多个元素。与集合不同,列表允许重复元素,如果列表中允许空值,则允许多个空值。List提供了add、remove方法来添加/删除元素。为了清除列表或从列表中删除所有元素,我们可以使用List的clear()方法。我们也可以使用removeAll()方法来达到与clear()方法相同的效果。在本文中,我们将通过相应的示例介绍clear()和removeAll()方法。语法-clear

Python程序:替换列表中的元素Python程序:替换列表中的元素Aug 25, 2023 pm 06:48 PM

在Python中,可以使用列表将多个项目保存在单个变量中。Python中用于存储数据集合的四种内置数据类型之一是列表,其他三种是元组、集合和字典,每种类型都有独特的用途。什么是列表?方括号用于构建列表。Python中最有效的工具是列表,因为它们不一定是同类的。像整数、字符串和对象这样的数据类型都可以在一个列表中找到。由于列表是可变的,因此即使在创建列表之后也可以对其进行更改。Python列表包含重复值的能力是其主要功能之一。这允许我们循环遍历列表的项目并确定每个项目的值。如果该值必须被替换,我们

Java程序:在循环链表中搜索元素Java程序:在循环链表中搜索元素Sep 11, 2023 am 11:45 AM

什么是喜欢列表和循环链表?链表是一种数据结构,其中每个节点都包含两部分,数据和地址路径。这些部分指向下一个节点,该节点始终与先前的节点创建互连。基于此,循环链表是最后一个节点与第一个节点有内部链接,这就是这种类型的链表称为循环链表。在Java环境中,当我们查找元素循环链表时,需要在链表中创建一个临时节点来指向。这样我们还需要声明两个变量。它们是曲目索引和曲目搜索。如果Temp节点在起始点为空,那么遍历列表就很重要,因为此时它不包含任何项目。循环链表的工作原理及其应用?循环链表的工作方法对于循环链

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
4 週前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )專業的PHP整合開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。